バーチャル3Dクリエイター神部まゆみです(*^_^*)
この記事はUnityでVRM1.0モデルのブレンドシェイプが動かない時の対処法メモです。
動作環境はUnity2022.3.22、VRoid Studio v2.1.0でエクスポートしたVRM1.0モデルです。
症状:シーンエディタではちゃんと設定したブレンドシェイプ(表情)が動いたが、実行画面を押すと真顔になる
シーン画面のアニメーションプレビューやVeryAnimationの編集画面ではちゃんと表情がついているんだけど、
実行ボタンを押すと突然真顔になりますΣ(゚Д゚)
どうも実行中はブレンドシェイプが無効になってるっぽい?

VRM0.0でエクスポートしたモデルはちゃんと動くんですけどね…。
【解決?】VRM InstanceのRuntimeのUpdate Type なし にしたら動いた
ここがデフォルトではLate Updateになっていたのだけど、なしにしたら動きました。

こちらの先輩のポストで解決しました!ありがとうございます(*^_^*)
別のアプリで起きた問題を自分のアプリでも確認中。
— NISHIWAKI (@lumidina) October 8, 2022
問題のモデル、どうやらVRM1.0ではVRMInstanceのRuntime.UpdateTypeが「なし」じゃないとSkinnedMeshRendererのブレンドシェイプが動かないな。
なしにしたら問題のシェイプは動いた。
そして0.xな自分のアプリでもブレンドシェイプは全部動いた。 pic.twitter.com/Bc8OKeE1lP
んーでも良いのかなこれ…。
Updateされないことで何か不具合が出る可能性があるかもしれない。
ブレンドシェイプ周りはVRM0.xのほうが扱いやすいか…?
VRM1.0とVRM0.xはブレンドシェイプ周りの動作がちょっと違うっぽいので、VRM1.0で動かなければVRM0.xでやったほうがスムーズに動くかも?
VRM1.0は2022年9月に出た比較的新しい規格ですが、検索すると出てくる情報はまだVRM0.xのほうが多かったりするし。
というかあんまり意識してない人も多いかも…?一応コンポーネントに若干違いがあるんですけど、一度unityにインポートしちゃうと分かりづらいですからね。
VRoid Studioならエクスポートする時に選べるので、VRM1.0でダメならVRM0.0でエクスポートしたモデルを使ってみるのも良いかもしれない。

最近のUniVRMだとVRM0.0のモデルを読み込んでも、VRM1.0のモデルも自動で生成されるっぽい? ※VRoidの場合
あくまでVRoid Studioでエクスポートしたモデルの話で、他のVRMモデルについては分からないけど。
VRM0.0のモデルをインポートしたら、VRM1.0のモデルも一緒に生成されてました。

VRM0.0のモデルは横にあるやつで残ってるんだけど、間違えやすいから注意した方が良いです。
VRoid StudioでエクスポートしたVRM0.0とVRM1.0モデルのunityでの見分け方
VRM1.0のほうは拡張子が .vrm で、コンポーネントにVRM Instanceってのがあります。

VRM0.0のほうは拡張子が .prefab で、↓コンポーネントにVRM Blend Shape Proxyってやつがあります。

コンポーネントが違うことで特にブレンドシェイプ周りの制御方法が違ってくるため、どちらを使っているかは一応把握しておいたほうが良いです。
UniVRMのバージョンによっても挙動が違う可能性も?
UniVRMのバージョンによっても挙動が変わってくる可能性があるかもしれない。
たまにバージョンアップで挙動が変わることは確かにあるような気がする。
そういえばuniVRMのバージョンによって、スクリプトのブレンドシェイプ操作がうまくいくやつとうまくいかないやつがあるな……なんでだろ?
— kagami (@KagamiHW) December 5, 2023
本当ならばVRM1.0に移行すればいいんだろうけどモデルロードのスクリプトとか色々変えるのが……
もしかしたらUniVRMのバージョン変えればまた違ってくるかも?
まぁ今度不具合出たら試してみます。
追記:UniVRMのバージョンを変えたらLate Updateでも普通に動いた
これやはりUniVRMのバージョンの問題なのかな?或いはUniVRMバージョンとUnityバージョンの相性の問題かもしれない。
UniVRM 0.128.3とUnity6000.0.32f1の組み合わせだとVRM1のLate Updateでも普通にブレンドシェイプ動きました。

一旦UniVRMを削除して別のバージョンを入れ直してみたら直る可能性があるかも?
UniVRMを削除して入れ直す方法は↓の記事で書きましたが、マテリアルエラーになって設定し直す羽目になる可能性があるので自己責任で(^_^;)
UniVRMはバージョンによって挙動が安定しなくて結構こういう不具合は遭遇してますね…。
結構UniVRMのバージョンを変えてみると直ることが多い気がします。
まぁ無料で使わせてもらってるから文句は言えないけども(^_^;)
更に追記:アニメーターコントローラーを新規に作り直したら動いたこともあった
↓にも書いたけど、このスクリプトを動かそうとしたらブレンドシェイプが動かなくて、結局アニメーターコントローラーを新規に作り直したら正常に動きました。
アニメーターコントローラーのファイルが壊れていたのか?原因は不明だけど、ChatGPTに聞いてもよくわかりませんでした。
ブレンドシェイプは色々な要因で動かないことがあるようなので、一つ一つ試してみるしかありませんね(-_-;)
おわりに
今のところとりあえず動いたけど、不具合がある可能性もあるか…。
Updateされない設定だからなぁ。
対症療法に過ぎないと思うので、UniVRMのバージョン変更で直る可能性があるならそのほうがいいかな?
まぁ色々な要因でなる可能性があるかもしれないけど。
まぁまた何かあれば追記します(*^_^*)