はじめに
この記事は筆者の備忘録です。バージョンや実行環境により症状が異なることがあります。
また、Unity初心者()であるため間違っている箇所が存在する場合があります。
前提
【version】
VRC : 2022.1.1p3
Unity : 2019.4.31f1
Unity上でAvatar3.0の最低限のセットアップが終わっており、VRC上で利用できる状態のprojectで作業しています。
最低限のセットアップってなに...って感じですが、モデルにアタッチしたVRC Avatar Descriptorの設定くらいでしょうか。具体的な方法は他の方がたくさん記事を出しているのでここでは割愛します。
仕様
今回作ったのは、VRC上でExpressions Menuから尻尾の回転を手動操作する機能です。
下の画像のようにスティックを傾けた方向に自由に動かせるようにしました。Tail Controllerを閉じると元の位置に戻ってくれます。
つまずいたところ
こちらの記事をもとに作っていたところ、Unityではanimator controllerが正常に動作しているにも関わらず、VRCでは全く動いてくれませんでした。
原因
作成したanimation controllerをPlayable LayersのGestureにアタッチしていることが原因でした。Gesture LayerではHumanoidのボーンを動かす際には問題ないのですが、ケモミミや尻尾など、Humanoidに含まれないボーンを動かすときは正常に動作しない不具合があるようです。
解決法
下の画像のように作成したanimation controllerをFX Layerにアタッチすることで直りました。(controllerのスペルミスは見逃してほしい)
原因部分の詳しい仕様
Gesture LayerにはAvatar Maskがかかっており、初期設定では手のボーンのみ動くため、動かしたいボーン(今回は尻尾のボーン)をAvatar Maskに追加する必要があります。
しかし、追加したHumanoid以外のボーンをWrite Defaultオフで動かすとTransfromアニメーションがVRC上で反映されない不具合があるようで困りものです。
Write Defaultsはanimation controller内の各stateのInspectorにあります
Write Defaultsってなに?という方はアニメーションをデフォルトの状態に戻すのを勝手にやってくれる機能だと思っておけばいいと思います。VRC公式ドキュメント Avatar3.0ではanimation controllerを作る際にWrite Defaults機能をオフにすることを推奨しています。
VRC公式ドキュメント Playable LayersによるとTransformを含むアニメーションはFX Layerに置くことは一応非推奨なようですが、現状実装しようとしたらFX Layerに置くしかないんですよね...
まとめ
アバターのモデル(fbx)に含まれるHumanoid以外のボーンを動かすときはFX Layerを使いましょう。
非推奨なのにそこにアタッチするしかないってなにごと?(;ω;)
公式ドキュメント見ても実際に動くかは試行してみないとわからないので先人の知恵を借りつついろいろ試してみるのが吉。
この記事が誰かの役に立てば幸いです。