UniVRMを普通にスクリプトから扱おうと思った時に、思った以上に欲しい情報がすぐ出てこないので、調べたこととか参考サイト、試行錯誤のメモをまとめておく。
表情をつける
- AccumulateValue() で必要な値を流し込み
- Applay() で反映
AccumulateValue()
Value について
第二引数の Value は Float で 0.0f - 1.0f の値を指定する。
Key 指定について
BlendShapePreset Enum を第一引数に取ることができるが、実際は拡張メソッドで、BlendShapeKey() で変換されて渡る。 が、ここの変換でnewがされてるので、高頻度で呼ぶ場合にアロケーションで死ぬ。
BlendShapeKey 型に自分で変換してキャッシュしておくのがよさそう。
呼び出しの雰囲気
m_vrmBlendShapeProxy.AccumulateValue(defaultBlendShapePreset, defaultBlendShapeValue);
m_vrmBlendShapeProxy.AccumulateValue(mixBlendShapePreset, mixBlendShapeValue);
m_vrmBlendShapeProxy.AccumulateValue(mouseBlendShapePreset, mouseBlendShapeCurrent);
m_vrmBlendShapeProxy.Apply();
mouseBlendShapeCurrent をそれなりの 0.6-0.9 とかで連続的に変化させること "はぁはぁ" みたいな口の動きをスクリプトで出来るけど、なんかもうちょっといい方法ある気がする。
アニメーション設定周り
このあたりの実装を参考に VrmAnimationController.cs。
m_vrmAnimationController.Play(defaultAnimation);
とか簡単適用できて楽なので、一先ずは上記実装をつかおうかな。