Unityにて設定した表情を、任意のキーボード入力によって切り替える処理について皆さまの知見からご教示賜りたく質問させていただきました。
以下、詳細です。
開発環境
・Unity 2018.2.14f1
・Visual Studio 2017
実装案
以下の2つの案を出して、「①」で実装する方向で決定しました。
①モデリングで作成したBlendShapeを任意のキーボード入力で切り替える。
②作成したAnimationを任意のキーボード入力で切り替える。
Unityにて設定した内容
・SkinnedMeshRendererを対象のモデルに設定
・上記モデルに対してスクリプト作成(後述します)
実装したスクリプト
C#
using System.Collections; using System.Collections.Generic; using UnityEngine; public class blenderShapeControll : MonoBehaviour { public GameObject head; public SkinnedMeshRenderer facialExpression; public float weight; public int angry; public int sad; // Use this for initialization void Start() { angry = facialExpression.sharedMesh.GetBlendShapeIndex("eye_angry"); head = GameObject.Find("head"); facialExpression = GetComponent<SkinnedMeshRenderer>(); } // Update is called once per frame void Update() { if (Input.GetKey(KeyCode.A)) { if(facialExpression.GetBlendShapeWeight(angry) <= 0) { weight = 100; facialExpression.SetBlendShapeWeight(angry, weight); } } else { weight = 0; facialExpression.SetBlendShapeWeight(angry, weight); } } }
実行結果
以下のエラーが出力されました。
Array index (-1) is out of bounds (size=17) UnityEngine.SkinnedMeshRenderer:SetBlendShapeWeight(Int32, Single) blenderShapeControll:Update() (at Assets/Scripts/blenderShapeControll.cs:32)
「angry」に入っているインデックスの値が「-1」で入っているために起こったエラーと認識しました。
上記以外に、適切な実装方法や作成方法についてのページについて皆さまの知見からご教示賜りさく思います。
不足している情報などありましたら、お知らせください。
まだ回答がついていません
会員登録して回答してみよう