Unityでゲーム作るぞ

Unityでゲーム制作できるようになるまでのリアルドキュメント

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#を勉強した方が分かりやすいのかねえ…