このページでは従来のハンドジェスチャーを使った表情変更をAV3.0で再現する方法を紹介します。
前提としてAV3.0アバターをアップロードできる知識を想定しています。
AV3.0ではアバターのアニメーションをUnityのAnimator Controllerで制御できます。
これによりVRChatの内部変数を使ったアニメーションの発動・条件分岐などが比較的容易に実装できるようになりました。
ここではVRChatで使われるハンドジェスチャー用の内部変数を利用してアバターの表情を制御します。
前提としてAV3.0アバターをアップロードできる知識を想定しています。
AV3.0ではアバターのアニメーションをUnityのAnimator Controllerで制御できます。
これによりVRChatの内部変数を使ったアニメーションの発動・条件分岐などが比較的容易に実装できるようになりました。
ここではVRChatで使われるハンドジェスチャー用の内部変数を利用してアバターの表情を制御します。
- Projectウィンドウを右クリック→Createで新規のAnimator Controllerを作成する。
- 作成したControllerを開き、左上のPrametersからハンドジェスチャー用の変数(GestureLeft, GestureRight)をintで追加する。
- 左上のLayersから新規レイヤーを追加する。
- 名前は何でもOK。ここでは左手で制御したいのでLeftHandとする。
- 歯車マークからLeftHandのWeightを1にする。
- LeftHandレイヤーを選択し右側のEntry, Exit等がある画面へ2で作成した無表情アニメーションをドラッグする。
- このとき無表情のStateが作成され、EntryからのTransition(矢印)が自動的に付与される。
- 同様に他の表情アニメーションのStateも追加する。
- 2つ目以降のStateはEntryから矢印は伸びない。
- Any Stateを右クリック→Make Transitionで矢印を出し、各表情のStateにつなぐ。
- Any Stateから伸びた各矢印をクリックし、InspectorからConditions(アニメーションの開始条件)を入力する。
- 例えば、左手を握り込んだとき(Fist)に表情を出す場合は、ConditionsをGestureLeft Equals 1とする。
- 手の形と数字の対応は公式のドキュメントを参照してください。
- 例えば、左手を握り込んだとき(Fist)に表情を出す場合は、ConditionsをGestureLeft Equals 1とする。
- 無表情への遷移はConditionsをGestureLeft Equals 0にする。
- こうすると、左手のハンドジェスチャーを切った状態(Neutral)で無表情に戻る。
以上で左手で表情を制御できるようになる。
右手でも制御したい場合は、同じControllerに右手用のレイヤーを追加するところから繰り返す。
アニメーション発生時に指を動かしたくない場合、上記の操作とは別に手のアニメーションを無効化する必要がある。
すべてハンドジェスチャーを無効化したいなら、とりあえずモデルのAvatar Descriptor→Playable Layers→Base→GestureレイヤーをNoneにすればOK。
一部のハンドジェスチャーだけ無効化したい場合、デフォルトのControllerを改造してGestureレイヤーに割り当てる。
すべてハンドジェスチャーを無効化したいなら、とりあえずモデルのAvatar Descriptor→Playable Layers→Base→GestureレイヤーをNoneにすればOK。
一部のハンドジェスチャーだけ無効化したい場合、デフォルトのControllerを改造してGestureレイヤーに割り当てる。
- デフォルトのハンドジェスチャー用のAnimator Controller「vrc_AvatarV3HandsLayer」を複製する。
- 左手と右手のアニメーションがそれぞれLeftHand, RightHandレイヤーに割り当てられているので、それぞれ編集する。
- 各ハンドジェスチャーがStateとして存在しているので、該当のStateを削除すればOK。
- 編集したControllerをAvatar DescripterのGestureレイヤーに割り当てる。
最新コメント