最終更新: kurotori4423 2019年10月22日(火) 13:08:15履歴
NPCを自作のワールドに設置してキャッキャウフフしたい!!そんな願望を叶えるべく、NPCシステムの開発を始めました。以下はその作り方やメモをまとめたものです。
開発の過程でできていったものを順番に書いていく予定です。
開発の過程でできていったものを順番に書いていく予定です。
- VRChatSDK (基本のキ。これがないとVRChatにワールドをアップロードできないぞ!)
- Standard Assets(Assetストアから無料でダウンロードできます。いろんな便利機能が盛り合わせ)
- FinalIK (視線トラッキングに使用します。最悪なくても歩き回らせることはできる。$90するけど$90払えば無料で使えるので実質無料)
まず、エージェントがワールドの床を認識し動き回れるようにNavMeshというガイドを設定します。
ワールドを用意します。NPCを歩き回らせる部分は必ずコライダーを持ち、Staticにチェックを入れてください。
次に、ツールバーからWindow > Navigation を開きます。
エージェントの設定をします。各項目の意味は以下の通りです。
Bakeタブに移動し、「Bake」ボタンを押します。
すると地形に合わせたNavMeshが生成されます。エージェントはこの青い範囲を移動することができます。
これで、ワールドの設定は完了です。
ワールドを用意します。NPCを歩き回らせる部分は必ずコライダーを持ち、Staticにチェックを入れてください。
次に、ツールバーからWindow > Navigation を開きます。
エージェントの設定をします。各項目の意味は以下の通りです。
Name | 名前 |
Radius | キャラクターの半径、この幅より狭いところは通り抜けられなくなる。 |
Height | キャラクターの高さ、この高さより低い穴などは通り抜けられなくなる。 |
Step Height | 乗り越えられる段差の高さ。 |
Max Slope | 登れる斜面の角度 |
Bakeタブに移動し、「Bake」ボタンを押します。
すると地形に合わせたNavMeshが生成されます。エージェントはこの青い範囲を移動することができます。
これで、ワールドの設定は完了です。
以下のアセットを必ずインポートしてください。
- Standard Assets (AssetStoreで無料でダウンロードできます。)
- VRChatSDK (VRChat公式サイトから最新のものをダウンロードしてください)
次に追いかけるものを作ります。今回は持ち運べるCubeを設定してみます。シーン上にキューブを設置し、サイズを小さくします(0.1倍くらい)
キューブに「VRC_Pickup」と「VRC_ObjectSync」コンポーネントを追加します。
作成したキューブを、エージェントが向かうターゲットとして登録します。エージェントの「AICharacterControl」コンポーネントのTargetにキューブを登録します。
これで設定は完了です。ここまでで一度プレイボタンを押して動作を確認してみましょう。
コレジャナイ
現状だと
キューブに「VRC_Pickup」と「VRC_ObjectSync」コンポーネントを追加します。
作成したキューブを、エージェントが向かうターゲットとして登録します。エージェントの「AICharacterControl」コンポーネントのTargetにキューブを登録します。
これで設定は完了です。ここまでで一度プレイボタンを押して動作を確認してみましょう。
コレジャナイ
現状だと
- エージェントがTポーズのままスライド移動する
- キューブを蹴飛ばしてしまう。
- 坂を登れない。
エージェントがTポーズのままなのは、対応するAnimatorControllerが設定されていないためです。一からAnimatorを設定するのは難しいので今回はStandard Assetsに含まれている「ThirdPersonAnimatorController」を使用します。
エージェントのAnimatorコンポーネントに「ThirdPersonAnimatorController」を設定します。
プレイボタンを押して動作を確認してみましょう。
コレジャナイ
なんかフワーってしてる。原因を調べてみると実行中接地判定を行っているOnGroundがFalseになっていました。なのでモーションとしては落下モーションを常に再生していたわけになります。このウィンドウはWindow > Animatorから開いてエージェントを選択状態にすると出てきます。
今回は空中モーションは使わないため、「Airborne」ステートは削除してしまいましょう。ついでに「Crouch」(しゃがみ移動)もしないのでこれも削除します。
プレイを押して確認してみます
OKですね。
エージェントのAnimatorコンポーネントに「ThirdPersonAnimatorController」を設定します。
プレイボタンを押して動作を確認してみましょう。
コレジャナイ
なんかフワーってしてる。原因を調べてみると実行中接地判定を行っているOnGroundがFalseになっていました。なのでモーションとしては落下モーションを常に再生していたわけになります。このウィンドウはWindow > Animatorから開いてエージェントを選択状態にすると出てきます。
今回は空中モーションは使わないため、「Airborne」ステートは削除してしまいましょう。ついでに「Crouch」(しゃがみ移動)もしないのでこれも削除します。
プレイを押して確認してみます
OKですね。
これで物を追いかけるエージェントは完成です。VRC_Worldプレハブを設置して、VRChatにアップロードして遊んでみましょう!
今後執筆予定のポイント巡回するエージェントも基本的な仕組みはこれを使用しています。ポイントに到達したら次のポイントにターゲットを付け替えることで実現しています。
今後執筆予定のポイント巡回するエージェントも基本的な仕組みはこれを使用しています。ポイントに到達したら次のポイントにターゲットを付け替えることで実現しています。
タグ
コメントをかく