mochi12345's blog

日々のことをつらつらと綴っていきます

動作しない可能性あり(確認中)Avatar3.0でGenericリグをアニメーションさせる

Avatar3.0でGenericアバターを動かそう!
* 2020年11月9日追記:アプデにより動作しなくなっているみたいです。確認中です

はじめにAvatar3.0とは

VRchatで先日Avatar3.0が公開されました。

docs.vrchat.com
medium.com

Avatar3.0は簡単に言うと、アニメーションの状態と遷移条件を自分で作れるようになって、条件に使っている値をVRCの中から操作できるようになった感じです。
詳しいところや内容の詳細等は日本語の解説記事をたくさん公開していただいているので、そちらを参考にしてください。

Avatar3.0ではなんと、Genericリグのアバターアニメーションさせることができるようになりました!

なので今回はGenericリグのモデルを使ってアニメーションのさせ方を説明したいと思います。

下準備

Genericリグのモデル詳細

f:id:mochi12345:20200825213621p:plainf:id:mochi12345:20200825213509p:plain
今回はBlenderでボーンが3本連なったモデルを作成しました。このボーンを曲げ伸ばすアニメーションをできるようにします。
作成したモデルは以下からダウンロードできます
https://drive.google.com/drive/folders/1lj_opAGs_5ygxhG8tZmRJ0bqop3syXxl?usp=sharing

環境準備

今回は以下の環境で行います。
Unity:Unity2018.4.20f1
VRCSDK:VRCSDK3-AVATAR-2020.08.13.17.48_Public.unitypackage
事前にプロジェクトを作成し、VRCSDKをインポートしておいてください。

モデルのインポート&Sceneへの配置

モデルをプロジェクトにインポート

FBXファイルをProjectウィンドウの適当な位置にドラッグアンドドロップしてください。(今回はAsset直下に持ってきました)
f:id:mochi12345:20200825233829p:plain

モデルの設定

Projectウィンドウ内のFBXファイルを選択すると、Inspectorウィンドウにモデルの設定画面が出ます。
「Rig」を選択し、AnimationTypeを「Generic」にします。
「Material」を選択肢、「Extract Materials ...」を選択し、モデルに使用しているマテリアルを展開します。

f:id:mochi12345:20200825233847p:plainf:id:mochi12345:20200825233852p:plain

モデルの配置

ProjectウィンドウのモデルをHierarchyウィンドウにドラッグアンドドロップします。
f:id:mochi12345:20200825233856p:plain

アニメーション作成用にモデル複製(やらなくても良い)

今回はHierarchyウィンドウにあるモデルを複製して、アバターに設定する用、アニメーションを作る用の2つで説明します。
Hierarchyウィンドウにあるモデルを選択し、Shift+Dでモデルが複製できますので、位置をずらして見やすくします。
f:id:mochi12345:20200825233907p:plain

アニメーションの作成

Animationファイルの作成

Hierarchyウィンドウで右クリックし、「Create」→「Animation」でAnimationファイルを作成します。
今回はLEFTという名前に変更します。
f:id:mochi12345:20200825233911p:plain

アニメーション用のモデルへの適用

先程複製したアニメーション用のモデル(Generic(1))に、AnimationファイルのLEFTをドラッグアンドドロップします。
(これで、アニメーション用のモデルをつかってアニメーションを作ることができるようになりました)
f:id:mochi12345:20200825233920p:plain

アニメーションの作成

(詳しいアニメーションの作り方は「アニメーション 作り方」などでググってください)
今回はアバターを周期的に曲げるようなアニメーションを作ります。
f:id:mochi12345:20200825234203g:plain
アニメーション用のモデル(Generic(1))をHierarchyウィンドウで選択すると、AnimationウィンドウでLEFTのアニメーションを選択できるようになります。
「Add Property」を押し、「▶」で展開していきながら、「Bone.001」の「Rotation」の横にある「+」を押します。
すると、0:00と1:00の地点に◇のマークが配置されます。この◇の場所でアバターを変形させたりできます。
f:id:mochi12345:20200825233925p:plain
今回はアバターを曲げて戻したいので、もう一点◇を作って曲がった状態を設定します。
Animationウィンドウで右クリックし、「Add Key」を押すと、右クリックした場所に新たな◇を作ることができます。今回は0:15の位置に作成しました。
(この画面のように縦に◇が5個並んでいない場合は、Bone.001:Rotationの左にある「▶」で展開してください。)

f:id:mochi12345:20200825233931p:plainf:id:mochi12345:20200825233936p:plain
Animationウィンドウの「▶|」を押して、0:15のところに白い線が来たことを確認し、Rotation.xの値を50に変更します。
(このとき、Previewボタンを押しておくと、配置したモデルで曲がり具合が確認できます)
f:id:mochi12345:20200825233941p:plain

アニメーションファイルをループ設定に

Projectウィンドウで作ったアニメーション(LEFT)を選択し、InspectorウィンドウのLoopTimeにチェックを入れます。
(チェックを入れないと、1回だけしか曲がらなくなります)
f:id:mochi12345:20200825233948p:plain

アバターの設定

必要ファイルのコピー

VRC内からアニメーションを開始するために、アニメーション設定ファイルとメニューファイルを設定する必要があるのですが、
今回はVRCSDKに備え付けられているものをコピーして使用します。
Projectウィンドウで「Assets」→「VRCSDK」→「Example3」→「Animation」→「Controllers」にある「vrc_AvatarV3LocomotionLayer」を複製します。
「Assets」→「VRCSDK」→「Example3」→「Expressions Menu」にある「DefaultExpressionParameters」と「DefaultExpressionsMenu」も複製します。
今回は複製したものをそれぞれ「GenericAV3_Locomotion」「GenericAV3_Parameters」「GenericAV3_EXMenu」にリネームしておきます。

f:id:mochi12345:20200825234009p:plainf:id:mochi12345:20200825234013p:plainf:id:mochi12345:20200825234018p:plain
**Avatar Descriptorの設定
アバター用のモデル(Generic)をHierarchyウィンドウで選択し、Inspectorウィンドウで「Add Component」から「VRC Avatar Descriptor」を選択します。
追加されたVRC Avatar Descriptorの「Playable Layers」「Expressions」の2つの「Customize」を押し、展開します。
先程のファイルをPlayable Layersの「Base」、Expressionsの「Menu」と「Parameter」にドラッグアンドドロップします。
f:id:mochi12345:20200825234001p:plainf:id:mochi12345:20200825234022p:plain

AnimationControllerの設定

Projectウィンドウで「GenericAV3_Locomotion」を選択すると、Animatorウィンドウに四角と矢印でできた図が表示されます。
(ここで歩いたときの動きなどが設定されていますが、詳細の説明はしません)
四角(State)にそれぞれアニメーションが設定されていて、矢印(Transition)に沿って順番に再生されていくと考えてください。
矢印には条件をつけることができ、条件が正になったら次の四角に移行します。
f:id:mochi12345:20200825234029p:plain

曲げアニメーションが動くStateを作成する

Animatorウィンドウ内の四角と矢印のある画面で、なにもないところを右クリックし、「Create」→「Empty」で新しいStateを作成します。
作成したStateを選択しておき、Inspectorウィンドウの「Motion」に曲げアニメーション(LEFT)をドラッグアンドドロップします。

f:id:mochi12345:20200825234035p:plainf:id:mochi12345:20200825234051p:plain

曲げアニメーションに遷移するためのParameterを作成する

Animatorウィンドウ左上の「Parameter」を押し、「+」→「Int」を押すと新しいパラメーターを追加できます。
今回作成したパラメーターは「Emote」という名前にリネームしておきます。

f:id:mochi12345:20200825234059p:plainf:id:mochi12345:20200825234103p:plain

曲げアニメーションに遷移するためのTransitionを作成する

Animatorウィンドウにある、「Standing」というStateを右クリックし「Make Transition」を押すと矢印が作成できるので、作成した「NewState」をクリックし、2つのStateを矢印で結びます。
NewStateからも同様にして矢印で結びます。

f:id:mochi12345:20200825234040p:plainf:id:mochi12345:20200825234047p:plain
StandingからNewStateに向かっている矢印をクリックすると、InspectorウインドウにTransitionの詳細が表示されます。
一番下の「Conditions」にある「+」をクリックします。
矢印で遷移する条件を設定できるので、今回は「Emote」「Equals」「1」とします。(Emoteパラメーターが1になると遷移するという意味)
NewStateからStandingの矢印には「Emote」「Equals」「0」を設定します。
f:id:mochi12345:20200825234108p:plainf:id:mochi12345:20200825234114p:plainf:id:mochi12345:20200825234118p:plain

EXMenuとEXParameterの設定

VRC内から先程設定したEmoteというパラメーターを1に変更できれば、矢印に沿って曲げるアニメーションを再生でき、0に戻せれば最初の状態に戻せそうな気がしてきました。
これを設定するのが、先程コピーしたEXMenuとEXParameterです。
まず「GenericAV3_Parameters」を選択し、InspectorウインドウでParameter4の欄に「Emote」「int」を設定します。
次に「GenericAV3_EXMenu」を選択し、Inspectorで「Add Control」をクリックします。
追加されたNewControlの▶をクリックして展開し、Typeを「Toggle」Parameterを「Emote,Int」に設定し、Valueを「1」にします。

f:id:mochi12345:20200825234121p:plainf:id:mochi12345:20200825234125p:plainf:id:mochi12345:20200825234129p:plain
これでアバターの設定は終了です。アップロードして動作を確認しましょう。

アバターのアップロード

VRCSDKウィンドウのBuildタブからアップロードするのですが、今回作成したアバターでエラーが発生しているので、!の右側の「AutoFix」をクリックしてエラーを解消します。
f:id:mochi12345:20200825234133p:plain
エラーが解消できたら「Build&Publish for Windows」を押し、アバター名を入力し、一番下のチェックを入れ、「Upload」でアップロードする。
Update Complete!が表示されたら、Okeyを押しUnityでの作業は終了です。
f:id:mochi12345:20200825234137p:plain

VRChatで動作を確認する。

VRChatを起動後MyCrerationにある、今回作成したアバターに着替え、アクションメニューを起動する。
(デスクトップだと「R」キー、Viveだとメニュー長押し)
Expressionsを開くと、「NewControl」が追加されているのでこれを押すことで曲げアニメーションが起動します。
f:id:mochi12345:20200825234144p:plain
f:id:mochi12345:20200825234531g:plain
もう一度「NewControl」を押すと曲げアニメーションが終了します。

これで、Genericアバターでもアニメーションができました!お疲れ様でした!

VRChat内でアニメーションがどのように動いているか確認する方法もお伝えしておきます。

デバックメニューで状態を確認する

アクションメニューを起動し、「Config」→「Debug」とすることで画面にデバッグメニューが表示される。
StateやParameterの中身も表示されるので見てみる。
アニメーションが起動していないとき、Parameters欄の「Emote」は0、Base欄の「State」はStandingになっています。
f:id:mochi12345:20200825234151p:plain
アニメーションを起動させると、「Emote」が1、「State」がNew Stateに変化していることが確認できます。
f:id:mochi12345:20200825234158p:plain

使用したファイルのDLリンク

今回使用したFBXやUnityPackageのDLリンクもおいておきます。
色々見て試してみてください。
https://drive.google.com/drive/folders/1lj_opAGs_5ygxhG8tZmRJ0bqop3syXxl?usp=sharing