UnityのArrayが分からんかった
Pushする時は問題ないのに、参照したり取り出したりすると、途端に"not member is Object"…みたいな事を言いやがる
結局、ArrayにPushする時は型を考えずに入れてもいいが、アクセスや取り出しの時は型明記する必要がある様子。わからん
private var char_objs = new Array(); private var index : int = 0; function Start () { var obj = GameObject.Find("GameChar"); for(var i = 0 ; i < obj.transform.childCount; i++){ //追加する時は型いらないのに char_objs.Push( obj.transform.GetChild(i) ); } } function Update () { if(Input.GetKeyDown("left ctrl")){ index++; if(char_objs.length <= index)index = 0; // 取り出しには型指定が… var obj : Transform; for(var i = 0 ; i < char_objs.length; i++){ obj = char_objs[i]; obj.tag = ""; } obj = char_objs[index]; obj.tag = "Player"; } }
ただこれでもdownCastとか出るし、コードが冗長になるのだ。
Transform[]だと、なんかPushできねえし…
Atsushi's Homepage ` Unity ÅgñÅÝé
ここを参考に、更に直しました。
private var char_objs : Transform[]; private var index : int = 0; function Start () { var obj = GameObject.Find("GameChar"); // Pushではなく初めに必要な分だけ長さを確保 char_objs = new Transform[obj.transform.childCount]; for(var i = 0 ; i < obj.transform.childCount; i++){ char_objs[i] = obj.transform.GetChild(i); } } function Update () { if(Input.GetKeyDown("left ctrl")){ index++; if(char_objs.length <= index)index = 0; for(var i = 0 ; i < char_objs.length; i++){ char_objs[i].tag = ""; } char_objs[index].tag = "Player"; } }
javascriptに曖昧に型制御を指定して悩まされる…いっそC#を勉強した方が分かりやすいのかねえ…