見出し画像

Avatar NPC Systemチュートリアル

この記事は「Avatar_NPC」が導入されたワールドアセットについて、使い方の概要を説明しています。
本記事では AvatarNPCシステム対応『EuropianHouse』 を例として導入方法などををご紹介していきます。

https://metacreatorstyo.booth.pm/items/5986606


VCCのインストール

VCC(VRChat Creator Companion)をインストールすることで、UnityでVRChatのコンテンツを製作する際に必要なアセットを一括で管理することができるようになります。
VCCはVRChat公式サイトにログインするとDL出来ます。

左側のメニューを開いてDownloadしましょう。

ダウンロード出来たらインストールを開始してください。
この時、PCにUnityがインストールされていない場合、VCCのインストールと同時に「Unity Hub」と現在VCCで利用可能なバージョンのUnityがインストールされます。
画面の指示に従ってインストールを進めましょう。

VCC公式ドキュメント

新規プロジェクトの作成

VCCからUnity2022以降でWorldプロジェクトを生成します。

右上のCreate New Projectをクリック!
Create Projectを押すとProjectが作成されます。
右上のOpen ProjectをクリックしてProjectを開きましょう。

なお、インストール済みUnityのバージョンは「Settings」から確認できます。
2024年8月現在、推奨されているUnityのバージョンは「2022.3.22f1」です。

Major Versionのところで現在のUnityのバージョンを確認できます。

パッケージのインポート

Unityを開くことが出来たら、ツールバーの Window > Package Manager を開き「Packages: Unity Registry」を選択、「AI Navigation」をインストールします。

一度インストールすれば、新しいProjectでもインストール済みになります。

続いて、
①「AvatarNPC_With_SetupTool.unitypackage」
②セットアップ済みのワールドのunitypackage
 (例:EuropeanHouse_AvatarNPC.unitypackage)
の順にパッケージをインポートします。
各unitypackageを「Project」タブ内の「Assets」にドラッグアンドドロップすればインポート出来ます。

なお、セットアップ済みSceneの中にQvPenがセットしてありますが、パッケージに同梱されておりませんので、お好みでインストールをしてください。

シーンファイルを開く

Assets > WCK_EuropeanHouse の中にあるシーンファイル
「EuropeanHouse_NPC.unity」をダブルクリックして開いてください。

Sceneにドラッグアンドドロップではなく、ダブルクリックしてください

そうすると、「TMP Importer」というデバッグ用のテキストを表示するためのアセットをインストールするウィンドウがポップアップで開きます。

デバッグに使うテキストツールのText Mesh Pro Importerです。

右上の ✕ ボタン を押してそのまま閉じても問題はありませんが、Sceneを開くたびにImporterが出てきてしまうので、上にある「Import TMP Essentials」を押してから、「import TMP Examples & Extras」を押してTMPをインストールしてください。

Sceneを開くとこんな画面になります。

Sceneはワールドとしてセットアップ済みですので、再生ボタンを押せばサンプルNPCの「Agent_Shapell」がワールド内を動き回ってくれます。

VRChat Client SimulatorによってGameタブ内を動き回れます

VRChat Client SimulatorはデフォルトでONになっていますが、上手く起動しない場合はツールバーのVRChat SDK > Utilities > Client Sim をクリックして ClientSim Settingsを開き、「Enable ClientSim」にチェックが入っているか確認してください。 

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が歩き出してして欲しい位置に移動させます。

Sceneに直接ドラッグアンドドロップすると位置調整が楽です。

なお、ご自身で製作や改変したアバターをワールドのProjectに引っ越しさせる方法に関しては、こちらの記事をご参考ください。

VRChat向け:アバターのPrefab化とExportpackage|竹流 (note.com)

※ModularAvatarで改変したモデルの場合は手動でアバターをベイクし、それをPrefabとして保存したあとにワールドにインポートしてください。詳しくは公式マニュアルをご参照ください。

アバターが配置できたら、ツールバー > AvatarNPC > Easy Setup Tool を開きます。

◆内蔵アクション・トリガーの設定
場所に依存しないそのNPC専用の行動などを設定したいときに利用できる機能です。
現在ではFindPlayerTrigger(プレイヤーを見つけたときに寄って行くアクションとトリガーのプレハブ)のみ設定できます。ここにプレハブを設定することで、このNPC専用の行動としてプレハブ内のパラメーターを自動で設定します。

基本設定タブの「内蔵アクション・トリガー」右側にある「+」ボタンを一回押して、表示された項目に AvatarNPC > Prefabs > Actions >InAgentAction >FindPlayerTrigger.prefab をセットしてください。
このPrefabをセットすることで、NPCがプレイヤーを見つけると寄ってくるようになります。

NPCに寄ってきて欲しくなければ、これは省略しても問題ありません。

◆表情アニメーションオーバーライド
それぞれの表情アニメーションを設定したアニメーションクリップに置き換える機能です。
Natural(通常)、Joy(喜)、Fun(楽)、Angry(怒)、Sorrow(哀)、Suprised(驚)、Sleep(眠)、Rubbing(撫)、Custom1~5(照れるなどお好みの表情)を設定できます。

アバターに付属の表情アニメーションや、ご自身でカスタマイズしたお好みの表情アニメーションを各項目にセットしてください。
一部、または全て未設定の項目があっても問題ありません。

それぞれ表情アニメーションを設定していきます。

◆詳細設定
現在(2024年8月)はセットアップされたNPC用のアニメーターコントローラーを保存するための保存場所フォルダを設定する項目があります。
基本的にデフォルトのままで問題ありません。

特に触らなくてOKです。

◆セットアップ
シーンに追加したアバターをツールにセットして「セットアップ!」を押します。

設定が完了したら、セットアップ!を押します。

これで基本的なAvatarNPCのセットアップが完了です。再生ボタンを押すと、ワールドのアクションに応じてNPCが動き出します。

問題なく動いている所を確認したら、もう一度再生ボタンを押して動きを止めてください。

ワールドのアップロード

ツールバーの VRChat SDK > Show Control Panel をクリック

AuthenticationタブにてVRChatアカウントでログイン

ご自身のアカウントでログインしてください。

下記項目を設定し、「Build and Upload」をクリック

・Name(ワールド名)
・Description(ワールドの説明)
・Thumbnail(ワールドのサムネイル。Sceneからキャプチャできる)
・データをVRChatにアップロードしても問題がないかどうかのチェック

サムネイルは「Select New Thumbnail」から別撮りした画像を設定することも出来ます。

Build and Uploadをクリックしたあと、しばらくアップロードの待機があります。
「Success」と表示されればワールドアップロード完了です。

セットアップされたNPCの撫でIKの微調整

「EasySetupTool」で設定されたNPCには頭を撫でると反応する「撫で機能」が搭載されますが、アバターのボーン位置からざっくりとした設定がされているだけの状態なので、ここを修正する事で「撫で機能」をより正確に楽しむことが出来ます。

HierarchyからNPCとしてセットアップしたアバターの内部「RubIK」を選択します。「アバター名_agent」としてセットアップされているので、中を開いて「RubIK」を見つけてください。

RubIKをクリックするとこんな表示になります。

緑色の円(Rub Distance:撫で機能が有効になる距離)と赤色の円(Max RubIntensity Distance:撫で機能の影響が最大になる距離)がおおよそ顔全体を覆うように位置とサイズを調整します。

※円の中心部が頭の真ん中からずれている場合、アバターのHeadボーン内にあるRub_HeadCenterの位置を調節してください。「Rub IK」をクリックすると赤緑青の矢印が表示されますので、緑の矢印で高さを調節、青の矢印で奥行きを調節できます。

Rub_IKの項目から矢印を調節してもOKです。
赤い円がちょうど頭を覆うくらい、緑の円はそのひとまわり大きめの感じがおすすめです。

次に両目の位置と、サイズを調整します。

頭をなでた時に目をつむる機能が搭載されており、黄色の円(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」に設定してください。

一番最後のフレームで目を閉じるように設定します
この画像の場合、シェイプキー名「vrc.Blink」を100にする事で瞬きをさせています

瞬きの速度や頻度はEnvironment Agentコンポーネントで調整できます。

Environment AgentはAgent_Coreの中にあります。


以上で概要の説明は終了です。
素敵なNPCライフをお楽しみください!

執筆者:竹流
https://x.com/airgreennet

更新履歴

2024/8/14 ClientSim、ModularAvatarの手動ベイクについて追記
2024/8/11 瞬きの設定について追記
2024/8/9 公開

この記事が気に入ったらサポートをしてみませんか?