VRChatでのケモノコミュニティ KemonoClub のWikiです。VRChatでケモノになるためのHowTo、ケモノアバターの紹介。イベントやコミュニティの情報を紹介しております。

概要

NPCを自作のワールドに設置してキャッキャウフフしたい!!そんな願望を叶えるべく、NPCシステムの開発を始めました。以下はその作り方やメモをまとめたものです。
開発の過程でできていったものを順番に書いていく予定です。

NPCシステムに必要なアセット

  • VRChatSDK (基本のキ。これがないとVRChatにワールドをアップロードできないぞ!)
  • Standard Assets(Assetストアから無料でダウンロードできます。いろんな便利機能が盛り合わせ)
  • FinalIK (視線トラッキングに使用します。最悪なくても歩き回らせることはできる。$90するけど$90払えば無料で使えるので実質無料)

構築方法

Unityでの呼称に合わせるためワールドを動き回るNPCをエージェントと呼称します。

エージェント用のワールドの設定

まず、エージェントがワールドの床を認識し動き回れるようにNavMeshというガイドを設定します。
ワールドを用意します。NPCを歩き回らせる部分は必ずコライダーを持ち、Staticにチェックを入れてください。





次に、ツールバーからWindow > Navigation を開きます。


エージェントの設定をします。各項目の意味は以下の通りです。
Name名前
Radiusキャラクターの半径、この幅より狭いところは通り抜けられなくなる。
Heightキャラクターの高さ、この高さより低い穴などは通り抜けられなくなる。
Step Height乗り越えられる段差の高さ。
Max Slope登れる斜面の角度

Bakeタブに移動し、「Bake」ボタンを押します。

すると地形に合わせたNavMeshが生成されます。エージェントはこの青い範囲を移動することができます。


これで、ワールドの設定は完了です。

エージェントの作成

ここからはキャラクターをセットアップし、ワールドを動き回るエージェントにします。複雑なことをするエージェントほど実装が難しくなるので簡単なエージェントから紹介していきます。

物を追いかけるエージェント

ターゲットとして設定したオブジェクトを追いかけるエージェントです。
導入アセット
以下のアセットを必ずインポートしてください。
  • Standard Assets (AssetStoreで無料でダウンロードできます。)
  • VRChatSDK (VRChat公式サイトから最新のものをダウンロードしてください)
手順1 キャラクターのセットアップ
まず、Humanoid設定が完了しているキャラクターモデルをシーン上に設置します。


モデルに「AICharacterControl」コンポーネントを追加します。コンポーネントが見つからない場合は、Standard Assetsがきちんと導入されているか確かめてください。
導入すると以下のようにいくつかのコンポーネントが自動で追加されます。

以下、このコンポーネントが付いたモデルをエージェントと呼称します。
手順2 追いかけるものの設定
次に追いかけるものを作ります。今回は持ち運べるCubeを設定してみます。シーン上にキューブを設置し、サイズを小さくします(0.1倍くらい)

キューブに「VRC_Pickup」と「VRC_ObjectSync」コンポーネントを追加します。


作成したキューブを、エージェントが向かうターゲットとして登録します。エージェントの「AICharacterControl」コンポーネントのTargetにキューブを登録します。


これで設定は完了です。ここまでで一度プレイボタンを押して動作を確認してみましょう。

コレジャナイ

現状だと
  • エージェントがTポーズのままスライド移動する
  • キューブを蹴飛ばしてしまう。
  • 坂を登れない。
という問題があります。ひとつひとつ解決していきます。
エージェントがTポーズのままスライド移動する
エージェントがTポーズのままなのは、対応するAnimatorControllerが設定されていないためです。一からAnimatorを設定するのは難しいので今回はStandard Assetsに含まれている「ThirdPersonAnimatorController」を使用します。
エージェントのAnimatorコンポーネントに「ThirdPersonAnimatorController」を設定します。

プレイボタンを押して動作を確認してみましょう。

コレジャナイ

なんかフワーってしてる。原因を調べてみると実行中接地判定を行っているOnGroundがFalseになっていました。なのでモーションとしては落下モーションを常に再生していたわけになります。このウィンドウはWindow > Animatorから開いてエージェントを選択状態にすると出てきます。

今回は空中モーションは使わないため、「Airborne」ステートは削除してしまいましょう。ついでに「Crouch」(しゃがみ移動)もしないのでこれも削除します。


プレイを押して確認してみます


OKですね。
キューブを蹴飛ばしてしまう。
現状だとキューブを蹴飛ばしてしまいます。パッと頭に浮かぶ改善策は、キューブの衝突レイヤーとエージェントの衝突レイヤーを分けることですね。これでも解決できます。
ただ、常にキューブとのゼロ距離まで追いかけてくるので、キューブから一定の距離まで近づいたら追跡をやめるようにしてみます。
エージェントの「Nav Mesh Agent」コンポーネントの「Stopping Distance」を0から1にしてみます。これで、キューブとエージェントの距離が1以下になったら追跡をやめるはずです。


プレイボタンを押してみます。


ちょっと蹴飛ばしたけれど、ちゃんと止まったのでOKですね。
坂を登れない
現状だと、坂の上にものを置くと斜面でエージェントが滑って登れません。

これはこれでかわいいのですが、ちゃんと登れるようにします。調べたところエージェントのRigidBodyの「Is Kinematic」にチェックを入れればよいとのこと。チェックを入れると重力や摩擦などの物理特性の影響を受けずに移動できます。

プレイボタンを押してチェック!


ちゃんと登れましたね!(なんだか動きが遅くなっている気がするけど)OK!
完成
これで物を追いかけるエージェントは完成です。VRC_Worldプレハブを設置して、VRChatにアップロードして遊んでみましょう!
今後執筆予定のポイント巡回するエージェントも基本的な仕組みはこれを使用しています。ポイントに到達したら次のポイントにターゲットを付け替えることで実現しています。

ポイント巡回するエージェント

執筆中

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

ワールド制作

メンバーのみ編集できます