VRChatで敵のHPと当たり判定を設定するチュートリアル

前記事

toumoro2.hatenablog.com

だんだんとVRChatというかUnityのチュートリアルになってる気がしますが、

VRChatにもっとRPGみたいなワールドが増えて欲しいので、今回は当たり判定とHPのチュートリアルを書きます。

f:id:toumoro2:20180814135255p:plain

まず、前回はかなり大雑把な当たり判定で、敵が怯んだり動いても同じ場所に当たり判定があったので

今回は当たり判定を頭部に移します。

まずは、頭部のボーンを選択し、そこに当たり判定用のコライダーを入れます。

 

当たり判定用のコライダーを入れたら、前回作った体全体の当たり判定用コライダーは消してしまい、そのコライダー用に作ったトリガーを新しい頭のコライダーに移し

不要になったトリガーは消しておいて下さい。

これで当たり判定は頭だけになり、青人形が頭の位置を動かすと、それに追従して当たり判定も移動します。

f:id:toumoro2:20180814135744p:plain

次に、ゲームっぽくするために敵に盾を持たせてみます。

適当な板を敵の右手のボーンの子にして持たせます。

ただ、このままだとアニメーションした時に盾がどうなるか分からないので、

上にある再生ボタンを押してアニメーションを確認します。

f:id:toumoro2:20180814135851p:plain

f:id:toumoro2:20180814140004p:plain

確認したら上の一時停止ボタンを押してちょうどいい位置に動かしますが、

再生中は数値の変更が反映されないので、トランスフォームの値をコピーして後で貼り付けます。

これでテストプレイをすると、敵が盾で弾をはじくようになり

f:id:toumoro2:20180814140203p:plain

後ろに回り込んで頭部を撃たなくてはならないので、(若干)ゲームっぽくなります。

f:id:toumoro2:20180814140254p:plain

 

次は敵のHPを設定していきます。

f:id:toumoro2:20180814140411p:plain

まず、前回作ったアニメーターに、新しく「Int」というものを追加し、

その「Int」の名前を「ダメージ」に変えます。

また、ノックダウン用のモーションも用意しておきます。

f:id:toumoro2:20180814140556p:plain

ノックダウン用モーションへの遷移条件を、「ダメージが9より大きい(9は含まない)」に設定します。

ただ、これだとひるみモーションとノックダウンモーションがごっちゃになってしまうので、ダメージが溜まったらひるみモーションをとらないようにします。

f:id:toumoro2:20180814140840p:plain

ひるみモーションへの遷移条件に「ダメージが10より小さい(10は含まない)」に設定します。

これで、ダメージが10を超えればひるみモーションを取ることなく、ノックダウンモーションへと遷移します。

 

あとは、頭部のコライダーのトリガーに「ダメージの数値を1足す」というのを追加すれば、弾が当たるたびにダメージが1ずつ蓄積されるようになります。

f:id:toumoro2:20180814141039p:plain

これでテストプレイをすると、9発までは耐えますが

f:id:toumoro2:20180814141210p:plain

10発目を当てるとダウンするようになります。

f:id:toumoro2:20180814141243p:plain

以上です。ではでは。

VRChatで棒に触ると反応して声を上げるモブを作るチュートリアル

タイトルがなんか変な感じがしますが、変な意図があるわけじゃなくてそのまま書いたらこうなっただけです。はい。

 

このチュートリアルは、下のチュートリアルの続きになっています。

toumoro2.hatenablog.com

 

このチュートリアルを始める前に、下のサイト等で

お気に入りのダメージボイスをダウンロードしておいて下さい。

soundeffect-lab.info

それでは始めます。

 

f:id:toumoro2:20180811180358p:plain

まず、接触判定のある棒を作ります。

ただの棒にPickupをつけてもいいのですが、せっかくなのでGripを設定して、持ちやすいようにしています。

このあたりは銃でやったことと同じです。

f:id:toumoro2:20180811180611p:plain

棒のコライダーの「Is Trigger」のチェックを入れます。

これを入れるとコライダーがTrigger化し、イベントの起動等に使われるようになり、

物理演算の接触判定は消えます。

上の図では物理演算の接触判定が消えたことを「Is Kinematic」をオンにすることで対処してますが、キネマティックをオンにしたくない場合は、トリガー化してないコライダーをもう一つ別に用意して下さい。

 

これで棒の設定はできたので、青人形の設定に移ります。

f:id:toumoro2:20180811180908p:plain

青人形にトリガーを追加して、起動する条件を「OnEnterTrigger」にして下さい。

「OnEnterTrigger」にしたら、レイヤーの設定を「Pickup」に変えます。

f:id:toumoro2:20180811181039p:plain

これで、Pickupレイヤーのトリガー化されたコライダーと反応すると動作するようになりました。棒はPickupレイヤーなので、棒に触ると動作します。

あとは、Actionsに前回と同じようにやられトリガーを設定して下さい。

 

次はやられボイスの設定をします。

f:id:toumoro2:20180811181329p:plain

まず、「Play On Awake」をオンにしていると勝手に叫ぶので、オフにして下さい。

次に、人間の声は届く距離は(たぶん)10mくらいなので、「Max Distance」を10mに設定します。

これで10mより離れると声は聞こえなくなります。

 

f:id:toumoro2:20180811181643p:plain

声の設定をしたら、「Actions」に「AudioTrigger」を追加します。

これは文字通り、音声を再生するトリガーです。

f:id:toumoro2:20180811181910p:plain

Receiversには、音声ファイルではなく

オーディオソースを持ったオブジェクトをドラッグします。

これを銃と棒の両方のトリガーで同じ設定をすれば完了です。

これでテストプレイをすると以下のようになります。

 これでチュートリアルは終了です。お疲れ様でした。

VRChatで弾が当たると反応するモブを作る

f:id:toumoro2:20180811161926p:plain

toumoro2.hatenablog.com

このチュートリアルは、上の3つのチュートリアルの続きになっています。

上の3つのチュートリアルで既に説明した部分は省略しています。

 

Fighting Motions Vol.1 - Asset Store

このチュートリアルを始める前に、この無料アセットをインポートしておいて下さい。

戦闘用のモーション集です。

 

まず、前回のチュートリアルで作成した青人形に、アニメーションコントローラーを追加していきます。

f:id:toumoro2:20180811162922p:plain

アニメーションコントローラーを追加したら、それをダブルクリックしてアニメータータブを開き、そこに待機モーションをドラッグします。

f:id:toumoro2:20180811163026p:plain

待機モーションをドラッグしたら、次はやられモーションをドラッグします。

この時、「Entry」が「待機モーション」に繋がっているようにして下さい。

f:id:toumoro2:20180811163130p:plain

置いたモーションの上で右クリックを押すと「MakeTransition」というのが出るので、それで待機とやられのモーションを相互に繋いでいきます。

f:id:toumoro2:20180811163340p:plain

左上のParametesタブから、「+」のマークを押して「Trigger」を追加します。

(「+」のマークに赤丸をつけるの忘れてましたが、そこを押してください)

f:id:toumoro2:20180811163602p:plain

そうすると新しいトリガーが追加されるので、「やられ」と名前を付けておいて下さい。

f:id:toumoro2:20180811164011p:plain

次に待機モーションからやられモーションへの変化を設定します。

中央の「Has Exit Time」にチェックが入っていると、待機モーションが一区切りついてからやられモーションに移行するのでタイミングが変になってしまいます。

なのでオフにしておいて下さい。

f:id:toumoro2:20180811163856p:plain

下の「conditions」の+を押して、「やられトリガー」を設定します。

これで、「やられトリガーが発動するとやられモーションへと移行する」という設定になります。

f:id:toumoro2:20180811164433p:plain

アニメーターのトリガーは「自動でOFFになる」性質を持っているので、戻りは特に設定しなくてOKです。

「Has Exit Time」のチェックさえ入っていれば、やられモーション終了と同時に、自動で待機モーションへと戻ります。

 

これで、「やられトリガーが起動するとやられモーションをとる」というものを設定できたので、あとはそのトリガーを起動する準備をするだけです。

 

まず、青人形に当たり判定を追加します。

青人形の身長が1.8mくらいで、Unityの数字が1=1mで設定されているので

それをイメージすると数値の設定がやりやすいです。

重さを気にしなければ、メッシュコライダー等でも大丈夫だと思います。

f:id:toumoro2:20180811164737p:plain

当たり判定を設定したら、前回の的と同じようにトリガーをオンパーティクルに設定して

アクションを「Animation Trigger」に設定します。

 

f:id:toumoro2:20180811164936p:plain

「Animation Trigger」に設定したら、アニメーターを持ったオブジェクト(青人形)をドラッグして

「Trigger」の項目に「やられ」と記入します。

f:id:toumoro2:20180811165151p:plain

これで、「パーティクルが当たるとやられのアニメータートリガーが起動する」となり、やられのアニメータートリガーが起動するので青人形は撃たれるとやられモーションをとるようになります。

f:id:toumoro2:20180811161926p:plain

テストプレイをして、銃で撃つと反応するようになっていれば成功です。

以上です。お疲れ様でした。

次は棒で殴れるようにしたり、やられボイスも追加してみたいと思います。

VRChatのワールドでパーティクルを射出する銃を作るチュートリアル(的、アバターのコライダー編)

前回のチュートリアルで弾が出るようになったので、

今回はその弾が的に当たるようにしていきます。

f:id:toumoro2:20180811135512p:plain

まず、適当な的を配置して、VRC_Trrigerの「OnParticleCollision」を追加します。

これでパーティクルのコライダーが当たるとイベントが発生するようになります。

f:id:toumoro2:20180811135711p:plain

弾が当たったら的の色が変わるようにしてみます。

f:id:toumoro2:20180811135822p:plain

これで、弾が当たると的の色が赤に変わります。

ただ、これだとずっと赤なので、自動的に別な色に変わるようにします。

f:id:toumoro2:20180811135940p:plain

設定を右クリックでコピペして

f:id:toumoro2:20180811140005p:plain

「弾があたってから1秒後に」色がグレーに変わるように設定します。

これで、弾が当たった時に1秒だけ赤くなる的になります。

f:id:toumoro2:20180811140128p:plain

テストプレイをしてみます。

最初は白です。

f:id:toumoro2:20180811140200p:plain

弾が当たると1秒だけ赤くなり

f:id:toumoro2:20180811140220p:plain

1秒後はグレーになり、もう一度弾を当てるとまた1秒だけ的が赤くなります。

 

これで的の作り方は終了です。

 

また、余談ですがこの的は「アバターが出したパーティクル」にも反応します。

f:id:toumoro2:20180811132138p:plain

アバターのパーティクルの設定を上記の赤枠のようにすれば、例えば「自分のアバターに仕込んだ銃」等でも的のトリガーを反応させることができます。

 

銃を作らなくても、この設定の的だけ大量に用意すれば、自分のアバターのパーティクルだけで遊べたりします。

 

ではでは

これで銃を作るチュートリアルを終わります。

VRChatのワールドでパーティクルを射出する銃を作るチュートリアル(弾の発射編)

f:id:toumoro2:20180811130949p:plain

前回持てるようにした銃に、パーティクルを追加していきます。

f:id:toumoro2:20180811131037p:plain

パーティクルを追加したら、とりあえず「PlayOnAwake」をオフにして下さい。

これがONだと弾が勝手に発射されます。

f:id:toumoro2:20180811131155p:plain

パーティクルに関しては、ここでは詳しく解説しないので

簡単にセミオート銃の設定をしていきます。

何をしているかと言うと、「1秒間に19発出るように設定して、発射時間を0.1秒」にしています。これで一回押すと弾が一発出る銃ができます。(10発ではなく19発なのは、10発だとラグがあると弾が出ないからです)

LoopingをONにするとフルオートになったり、Shapeを設定してRate over Timeを200にするとショットガンになったりするので、色々試してみて下さい。

f:id:toumoro2:20180811131702p:plain

それだけだとちょっと地味なので、弾にTrailを追加します。

これを上の図のように設定すると弾道が見えるようになります。

これを調整すると曳光弾も作れます。

f:id:toumoro2:20180811131950p:plain

次にコリジョンを設定していきます。

これの設定を間違うとトリガーが反応しないので気をつけてください。

画面を見つつ、大きさなどを設定して下さい。

f:id:toumoro2:20180811132138p:plain

中央の「ColiderWith」は「どのレイヤーにコライダーが当たるか」を設定することができて、初期状態だと銃本体に当たって弾が出なくなるので、銃(pickupレイヤー)に当たらないように設定します。

一番下の「SendCollisionMessages」を設定しないと、弾が当たっても的に情報を伝えることができないので、ONにして下さい。

 

 

f:id:toumoro2:20180811132527p:plain

これで弾の設定ができたので、引き金を引いたら弾が出るようにします。

銃本体にTriggerを追加していきます。

f:id:toumoro2:20180811132631p:plain

f:id:toumoro2:20180811132646p:plain

「手に持った状態で引き金を引いたら」

「パーティクルのスイッチを操作する」ようにします。

f:id:toumoro2:20180811132817p:plain

操作されるパーティクルを選択します。

先ほど作ったパーティクルをドラッグして、

発射するので設定を「True」に変えてください。

f:id:toumoro2:20180811132942p:plain

これでテストプレイすればこのように弾が出るはずです。

これで弾の発射編は終わりです。次回は的を作ります。

 

ですがその前に

f:id:toumoro2:20180811133111p:plain

前回オブジェクトシンクを付け忘れていたので、銃に追加します。

これが無いと他のプレイヤーと位置が同期しません。

以上です。

VRChatのワールドでパーティクルを射出する銃を作るチュートリアル(下準備、銃のPickup設定編)

 

VRChatにもっと射撃場ワールドが増えて欲しかったのでこのチュートリアルを作りました。自分も初めて作ったものをチュートリアルにしているので、もっといい方法があるかもしれませんが何かの参考になればと。

 

f:id:toumoro2:20180811110301p:plain

まず、VRCSDKを入れて、とりあえず床(Plane)を配置します。

そこに、後で(的として)使うのと、アバターの大きさ参考用に

VRCSDKに入っている青い男を置いておきます。

 

 

f:id:toumoro2:20180811110400p:plain

次に、ピックアップ用レイヤーを作る準備として、SDKのプレハブから

「VRCWorld」をドラッグしてSceneに入れます。

f:id:toumoro2:20180811110355p:plain

f:id:toumoro2:20180811110346p:plain

この「Setup Layers」というのを押すと、レイヤーが自動的にVRC用に設定されます。

この作業を最初にやっておくと、後でレイヤーを設定し直す手間が省けます。

 

f:id:toumoro2:20180811110338p:plain

レイヤーを設定したら、Cubeを配置して、青い男の大きさを見つつ

手に持ちやすいくらいの大きさと高さに設定します。

Cubeを置いたら、「Add Component」から「VRC_Pickup」を追加して下さい。

f:id:toumoro2:20180811110335p:plain

「VRC_Pickup」を追加すると、自動的にCubeのレイヤーが「Pickup」に設定されます。

レイヤーの説明は長くなるので省きますが、Pickupレイヤーはプレイヤーにぶつからないので、掴むオブジェクトに向いています。

中央の「IsKinematic」のチェックを押すと空中に静止します。

これは趣味の問題ですが、自分は落とした時に拾うのが面倒なのでこの設定を使っています。

次に「AutoHold」を「Yes」にします。

これが無いと引き金を引けません。

f:id:toumoro2:20180811110331p:plain

次に「銃を持つ位置」を設定します。

上の図のようにやって、Cubeの子に空のゲームオブジェクトを配置して下さい。

これが後に「銃を持つ位置」になります。

f:id:toumoro2:20180811110328p:plain

そのままだと変な角度に持たれてしまうので、ゲームオブジェクトの角度を上のように設定します。

このあたりの角度についてはこちらで詳しく解説されています。

vrcprog.hatenablog.jp

f:id:toumoro2:20180811110404p:plain

ゲームオブジェクトの設定をしたら、そのゲームオブジェクトを「ExactGun」にドラッグして

「Orientation」を「Gun」に設定します。

f:id:toumoro2:20180811112931p:plain

この状態で起動すれば、Cubeを銃のように持てるはずです(立方体なので良くわからないですが)

これで下準備編は終わりです。次は弾が出るようにしていきます。