この記事でのバージョン
Unity 2020.3.25f1
はじめに
Unityの3Dモデル(SkinnedMeshRenderer)には
BlendShapes(ブレンドシェイプ)で表情等の操作が出来るものがありますが、
今回はこのBlendShapesの値をプログラムで操作してみようという感じの記事です!
なお、記事中では以下のアセットを使っています。
BlendShapesの値をプログラムで操作する
早速ですが、BlendShapesの値をプログラムで操作するには
SkinnedMeshRendererのSetBlendShapeWeightを
第1引数に変更したい所のindex、第2引数が設定したい値を渡して実行するだけ。
(※以下の例のButton属性はOdinの属性)
[Button]//Inspectorにメソッドを実行するボタンを表示 public void ChangeSmile() { _skinnedMeshRenderer.SetBlendShapeWeight(21, 100); _skinnedMeshRenderer.SetBlendShapeWeight(29, 100); _skinnedMeshRenderer.SetBlendShapeWeight(38, 100); _skinnedMeshRenderer.SetBlendShapeWeight(45, 100); }
ちなみにindexは上から順に0,1,2……という感じです。
また、GetBlendShapeWeightで指定したIndexの値を取得する事も出来ます。
[Button] public void GetBlendShapeWeight() { Debug.Log($"0番目のブレンドシェイプの値 : {_skinnedMeshRenderer.GetBlendShapeWeight(0)}"); Debug.Log($"2番目のブレンドシェイプの値 : {_skinnedMeshRenderer.GetBlendShapeWeight(2)}"); Debug.Log($"5番目のブレンドシェイプの値 : {_skinnedMeshRenderer.GetBlendShapeWeight(5)}"); }
ちなみにsharedMeshのblendShapeCountで設定されているBlendShapesの数を取得できるので、
以下のようなループで回して全てに0を設定すればリセットする事も可能です。
[Button] public void ResetFace() { for (int i = 0; i < _skinnedMeshRenderer.sharedMesh.blendShapeCount; i++) { _skinnedMeshRenderer.SetBlendShapeWeight(i, 0); } }