Avatars3.0で表情が戻らない現象の直し方 決定版
連絡・質問はhttps://twitter.com/InPlanariaへ
はじめに
AnimEditUtility 更新しました。https://t.co/0XL0AbRKNJ
— フレア/whiteflare (@whiteflare_vrc) 2022年8月6日
WriteDefaults がオンの AnimatorController を、オフの AnimatorController に一発で切り替える機能を追加しました。 pic.twitter.com/ovnBm9jnms
このツールで一発でどうにかなるので、面倒ならこれを使ってください
~以下、手動で作る方法~
VRChat SDK3(Avatars3.0)製VRCアバターの表情が変えたら戻らない/表情が混ざるバグ、およびデフォルトの表情が狂うバグ(3倍シェイプキー現象)を直す方法を
Unity初心者にもギリギリ分かるくらいに細かく書いたページ。
そのバグに悩んでるやつ見つけたらとりあえず投げとけばいい記事を目指す。
注意事項
デフォ表情アニメをLeft Handのidleに入れるのをやめろ………!!!!!!!!!!!
そういう手順で説明してるサイトあるけど基本的に間違い
2021/12/21追記:アニメーションの作りによっては効果的な場合もあるが、少なくとも「数種類の表情同士が混ざる」で困っている場合にこの対処するのはダメ
前提
とりあえず直す方法
全体の流れ
- デフォルト表情アニメーションを作る
- FXレイヤーのAnimator Controllerに新規レイヤー作成
- 1で作ったアニメーションを導入
デフォルト表情アニメーションを作る
Hierarchyにある、VRC Avatar Descriptor (Script)のついたアバターをクリックする。
Inspectorに表示されているAnimatorのController欄がNoneであることを確認する。
もしNoneでなければ、◎をクリックしてNoneを選択しておく。
Unityのツールバーより、Animationウィンドウを開く。
このようなウィンドウが出るので、Createを押す。
animファイル(アニメーションファイル)を保存するウィンドウが出るので、適当な名前を付けて保存する。
保存したら、Animationウィンドウの録画ボタン(赤い二重丸)を押す。
アバターがしゃがんだポーズになる。
Hierarchyより、表情に関連するメッシュを選択する。大抵はFaceかBodyという名前。
Skinned Mesh Renderer のBlendShapesの左の三角をクリックする。
BlendShapesの一覧が表示される。バーを動かすと数字とバーが赤くなり、数値がアニメーションファイルに記録されていく。
リップシンクとまばたきに関係のないブレンドシェイプ全てのバーを動かしたり数字を動かしたりして、デフォルトの表情をアニメーションファイルに入力する。
リップシンクとまばたきに関連するブレンドシェイプの名前の確認方法
Hierarchyのアバターを選択し、Inspectorに表示されるVRC Avatar DescriptorのLip Sync欄、Eye Look欄のEyelidsを確認する。
もし誤ってアニメーションファイルに登録してしまった場合、Animationウィンドウから該当ブレンドシェイプ名を右クリックしてRemove propertyする。
「デフォルトの表情で常にジト目ブレンドシェイプを使用したい」といった場合はブレンドシェイプに0以外の数字を入力すればいい。
リップシンクとまばたきを除く全ブレンドシェイプの登録が完了し、デフォルト表情のアバターが表示された状態になったら
一旦Animationウィンドウを閉じる。(正常な場合はアバターがTポーズに戻る)
FXレイヤーのAnimator Controllerに新規レイヤー作成
Hierarchyにある、VRC Avatar Descriptor (Script)のついたオブジェクトをクリックする。
Inspectorを下にスクロールすると、Playable Layersの項目がある。
FXに割り当てられているもの(Animator Controller)をダブルクリックする。
Animatorウィンドウが開き、Inspectorには先ほどダブルクリックした名前が表示されていることを確認する。
レイヤー構成はアバターによって異なる場合がある。
Layerの右の+ボタンを押すと、New Layerが作られる。
New Layer右の歯車マークを押し、Weightを1にする。
忘れずにNew Layer右の歯車マークを押し、Weightを1にする。
Weightを1にしないとどんなアニメーションも動かない。
ドラッグアンドドロップでNew Layerを一番上に移動する。
追記:このとき元から一番上にあったレイヤー(ここではAllParts)のWeightが0になる場合がある。必要があればWeightは1に戻しておく。
作ったアニメーションを導入
Animationウィンドウ上部の表示がNew Layerになっていることを確認したら、先ほど作ったデフォルト表情アニメーションをドラッグアンドドロップする。
オレンジ色の四角が生成される。
オレンジ色の四角をクリックし、Write Defaultsをオフにする。
以上で手順は完了である。
2022/01/07追記
Motionがnone(なにもアニメーションが入っていない)になっているステートがあるとき、表情が全く表示されなくなる場合がある。
その不具合を回避するため、新しく何も入っていないアニメーションを作成し、そのnoneになっているステート(idleなど)に割り当てる。
備考
- もし編集した後アバターが中腰状態から戻らなくなった場合は こちらの記事の手順で直す。
- アップロードタイミングで中腰になるのが気に入らない場合、AnimatorのController欄を再度Noneにする。
- Write Defaultsをブン殴れるワールドだれか作ってくれない?