Avatar NPC Systemチュートリアル
この記事は「Avatar_NPC」が導入されたワールドアセットについて、使い方の概要を説明しています。
本記事では AvatarNPCシステム対応『EuropianHouse』 を例として導入方法などををご紹介していきます。
https://metacreatorstyo.booth.pm/items/5986606
VCCのインストール
VCC(VRChat Creator Companion)をインストールすることで、UnityでVRChatのコンテンツを製作する際に必要なアセットを一括で管理することができるようになります。
VCCはVRChat公式サイトにログインするとDL出来ます。
ダウンロード出来たらインストールを開始してください。
この時、PCにUnityがインストールされていない場合、VCCのインストールと同時に「Unity Hub」と現在VCCで利用可能なバージョンのUnityがインストールされます。
画面の指示に従ってインストールを進めましょう。
新規プロジェクトの作成
VCCからUnity2022以降でWorldプロジェクトを生成します。
なお、インストール済みUnityのバージョンは「Settings」から確認できます。
2024年8月現在、推奨されているUnityのバージョンは「2022.3.22f1」です。
パッケージのインポート
Unityを開くことが出来たら、ツールバーの Window > Package Manager を開き「Packages: Unity Registry」を選択、「AI Navigation」をインストールします。
続いて、
①「AvatarNPC_With_SetupTool.unitypackage」
②セットアップ済みのワールドのunitypackage
(例:EuropeanHouse_AvatarNPC.unitypackage)
の順にパッケージをインポートします。
各unitypackageを「Project」タブ内の「Assets」にドラッグアンドドロップすればインポート出来ます。
なお、セットアップ済みSceneの中にQvPenがセットしてありますが、パッケージに同梱されておりませんので、お好みでインストールをしてください。
シーンファイルを開く
Assets > WCK_EuropeanHouse の中にあるシーンファイル
「EuropeanHouse_NPC.unity」をダブルクリックして開いてください。
そうすると、「TMP Importer」というデバッグ用のテキストを表示するためのアセットをインストールするウィンドウがポップアップで開きます。
右上の ✕ ボタン を押してそのまま閉じても問題はありませんが、Sceneを開くたびにImporterが出てきてしまうので、上にある「Import TMP Essentials」を押してから、「import TMP Examples & Extras」を押してTMPをインストールしてください。
Sceneはワールドとしてセットアップ済みですので、再生ボタンを押せばサンプルNPCの「Agent_Shapell」がワールド内を動き回ってくれます。
VRChat Client SimulatorはデフォルトでONになっていますが、上手く起動しない場合はツールバーのVRChat SDK > Utilities > Client Sim をクリックして ClientSim Settingsを開き、「Enable ClientSim」にチェックが入っているか確認してください。
動いている所を確認できたら、もう一度再生ボタンを押して動きを停止させてから次の作業に入ってください。
アバターをNPCとしてセットアップする
同梱されている「EasySetupTool」はVRChat向けのアバターとしてセットアップされたモデルをAvatarNPC用のエージェント(NPC)に簡単に変換することができる自動化ツールです。
このツールは現在(2024年8月)Humanoid対応されているアバターを対象としています。
非ヒューマノイドのアバターには対応していません。
また、PhysBoneを自動でDynamicBoneに変換する機能などはありません。
(髪や服をDynamicBoneで揺らしたい場合、https://booth.pm/ja/items/4032295 こちらのツールなどを利用して変換してください)
EasySetupToolの使い方
エージェント(NPC)に変換したいアバターをSceneに配置します。
アバターのPrefabをHierarchyにドラッグアンドドロップし、NPCが歩き出してして欲しい位置に移動させます。
なお、ご自身で製作や改変したアバターをワールドのProjectに引っ越しさせる方法に関しては、こちらの記事をご参考ください。
VRChat向け:アバターのPrefab化とExportpackage|竹流 (note.com)
※ModularAvatarで改変したモデルの場合は手動でアバターをベイクし、それをPrefabとして保存したあとにワールドにインポートしてください。詳しくは公式マニュアルをご参照ください。
アバターが配置できたら、ツールバー > AvatarNPC > Easy Setup Tool を開きます。
◆内蔵アクション・トリガーの設定
場所に依存しないそのNPC専用の行動などを設定したいときに利用できる機能です。
現在ではFindPlayerTrigger(プレイヤーを見つけたときに寄って行くアクションとトリガーのプレハブ)のみ設定できます。ここにプレハブを設定することで、このNPC専用の行動としてプレハブ内のパラメーターを自動で設定します。
基本設定タブの「内蔵アクション・トリガー」右側にある「+」ボタンを一回押して、表示された項目に AvatarNPC > Prefabs > Actions >InAgentAction >FindPlayerTrigger.prefab をセットしてください。
このPrefabをセットすることで、NPCがプレイヤーを見つけると寄ってくるようになります。
◆表情アニメーションオーバーライド
それぞれの表情アニメーションを設定したアニメーションクリップに置き換える機能です。
Natural(通常)、Joy(喜)、Fun(楽)、Angry(怒)、Sorrow(哀)、Suprised(驚)、Sleep(眠)、Rubbing(撫)、Custom1~5(照れるなどお好みの表情)を設定できます。
アバターに付属の表情アニメーションや、ご自身でカスタマイズしたお好みの表情アニメーションを各項目にセットしてください。
一部、または全て未設定の項目があっても問題ありません。
◆詳細設定
現在(2024年8月)はセットアップされたNPC用のアニメーターコントローラーを保存するための保存場所フォルダを設定する項目があります。
基本的にデフォルトのままで問題ありません。
◆セットアップ
シーンに追加したアバターをツールにセットして「セットアップ!」を押します。
これで基本的なAvatarNPCのセットアップが完了です。再生ボタンを押すと、ワールドのアクションに応じてNPCが動き出します。
問題なく動いている所を確認したら、もう一度再生ボタンを押して動きを止めてください。
ワールドのアップロード
ツールバーの VRChat SDK > Show Control Panel をクリック
AuthenticationタブにてVRChatアカウントでログイン
下記項目を設定し、「Build and Upload」をクリック
・Name(ワールド名)
・Description(ワールドの説明)
・Thumbnail(ワールドのサムネイル。Sceneからキャプチャできる)
・データをVRChatにアップロードしても問題がないかどうかのチェック
Build and Uploadをクリックしたあと、しばらくアップロードの待機があります。
「Success」と表示されればワールドアップロード完了です。
セットアップされたNPCの撫でIKの微調整
「EasySetupTool」で設定されたNPCには頭を撫でると反応する「撫で機能」が搭載されますが、アバターのボーン位置からざっくりとした設定がされているだけの状態なので、ここを修正する事で「撫で機能」をより正確に楽しむことが出来ます。
HierarchyからNPCとしてセットアップしたアバターの内部「RubIK」を選択します。「アバター名_agent」としてセットアップされているので、中を開いて「RubIK」を見つけてください。
緑色の円(Rub Distance:撫で機能が有効になる距離)と赤色の円(Max RubIntensity Distance:撫で機能の影響が最大になる距離)がおおよそ顔全体を覆うように位置とサイズを調整します。
※円の中心部が頭の真ん中からずれている場合、アバターのHeadボーン内にあるRub_HeadCenterの位置を調節してください。「Rub IK」をクリックすると赤緑青の矢印が表示されますので、緑の矢印で高さを調節、青の矢印で奥行きを調節できます。
次に両目の位置と、サイズを調整します。
頭をなでた時に目をつむる機能が搭載されており、黄色の円(Eye Close Distance)で目をつむり始める距離、赤色の円(Eye Close End Dist)で完全に目を閉じる距離を設定しています。
目をつむるシェイプキーを「Right Eye Close Shape Key」及び「Left Eye Close Shape Key」に設定します。
※スペルミスがあると動作しませんので、シェイプキー名は正確に入力してください。
続いて、目をつむるシェイプキーが入っているメッシュを「Skinned Mesh Renderer」に設定します。
※目をつむる設定は、表情アニメーションオーバーライドに登録した「Rubbing」よりも優先されます。「Right Eye Close Shape Key」「Left Eye Close Shape Key」を設定しない事で「Rubbing」が優先的に使用されます。
自動瞬きの実装
Naturalアニメーションについて、0フレームを目を開いた状態、最後のフレーム(任意の秒数で可)を目を閉じた状態のアニメーションを作成し、NaturalステートのMotion TimeをBlinkパラメータにチェックを入れた状態にすることで実装できます。
自動瞬きはデフォルトでONになっています。
EasySetupToolの「表情アニメーションオーバーライド」項目を設定してからNPCをセットアップすると、デフォルトではAssets > NPCController の中に「アバター名_AgentAnimator.Controller」が生成されます。
これをダブルクリックし、Facial欄の「Natural」をクリックします。
設定されている「Motion」のAnimationをダブルクリックし、目を閉じるシェイプキー(アバターによっては目を閉じるボーンアニメーション)をアニメーションに登録して、0フレーム目を目を開けた状態、任意フレーム目(最後のフレーム)に目を閉じた状態としてアニメーションを作成し、Naturalの「Motion」に設定してください。
瞬きの速度や頻度はEnvironment Agentコンポーネントで調整できます。
以上で概要の説明は終了です。
素敵なNPCライフをお楽しみください!
執筆者:竹流
https://x.com/airgreennet
更新履歴
2024/8/14 ClientSim、ModularAvatarの手動ベイクについて追記
2024/8/11 瞬きの設定について追記
2024/8/9 公開