前提・実現したいこと
参考URL
下のようなinspectorを作りたいのですが
一つづつ
public float idle; public float eyeBlink; public void Upadate() { idel=... eyeBlink=... }
とするのはめんどくさいと感じて下のように
public float配列で作ったのですが、keyがわからなく困っています。
もっと賢い作り方を考えているのですが、限界を感じて質問しています。
該当のソースコード
C#
1 2 public float eye_face; 3 4 public float[] face_list = new float[65]; 5 6 private bool nameListBool = false; 7 8 public void Update() { 9 var net = NetworkMeshAnimator.Instance; 10 face_list = net.blendShapeList; 11 12 13 if(!nameListBool){ 14 var nameList = net.blendShapeName; 15 Debug.Log(nameList); 16 Debug.Log(nameList.Count); 17 for (int i = 0; i < nameList.Count; i++) 18 { 19 Debug.Log(nameList[i]); 20 if(i>19){ 21 nameListBool = true; 22 } 23 } 24 }
できていること
face_listという配列の一つずつに値を入れることはできています。
nameListという配列にkeyにしたい文字列を入れています。
やりたいこと
nameList[0] : face_list[0]
nameList[1] : face_list[1]
nameList[2] : face_list[2]
このように nameListの文字列 = face_listの値
というインスペクタを参考URLのように作りたいです。
考え方だけやヒントになりそうなことでも教えていただけると嬉しいです。
補足情報(FW/ツールのバージョンなど)
Mac
Unity 2018.3.14
修正に関して
クラスを作ることをやってみようとしているのですが、遠回りの実装をしている気がしたので、アドバイスを頂きたいです。
クラスを作って
その変数にfloat でbrowOuterUpRight .... とすることで、
参考URLのようにinspectorを作るつことができたのですが、
updateの中でそのクラスに値をセットするメソッドを使って、適当な値を下のように代入しても
public void SetDate(int order ,float data){ //faceList[order] = data; cheekPuff = data; }
inspectorでは反映されませんでした。(なぜなのでしょうか?)
update関数内での
Debug.Log(faceblendshape.cheekPuff);
では値が入ってることを確認できています。
イメージでは、
update関数で配列のindexと値を使って
クラスのset関数を呼び出して、
配列のindexに対応するfloat(cheekPuff)に値を代入しようと思っているのですが、、、、
c#
1 [System.Serializable] 2 class FaceBlendShape 3 { 4 public float browOuterUpRight, mouthLowerDownLeft, eyeLookUpLeft, cheekPuff; 5 6 public string[] faceList = {"browOuterUpRight","mouthLowerDownLeft","eyeLookUpLeft","cheekPuff"}; 7 8 public string SetDate(int order ,float data){ 9 //faceList[order] = data;としたいが、stringにfloatを入れることになってしまう。 10 cheekPuff = data; 11 return "0"; 12 } 13 } 14 [SerializeField] FaceBlendShape faceBlend; 15 16 17 public void Update() { 18 FaceBlendShape faceblendshape = new FaceBlendShape(); 19 var net = NetworkMeshAnimator.Instance; 20 var nameList = net.blendShapeName; 21 22 for (int i = 0; i < nameList.Count; i++){ 23 faceblendshape.SetDate(i,net.blendShapeList[i]); 24 } 25 Debug.Log(faceblendshape.cheekPuff);
回答1件
あなたの回答
tips
プレビュー