2011年12月26日 星期一

【進階教學】抓取物件腳本、變數、名稱 - GetComponent

遊戲中相當常使用的功能GetComponent,經常用來Get(取得)物件上的Component(組件)資訊,若沒有取得組件會回傳null值。

gameObject.GetComponent("ScriptName");

如果發現要抓取GetComponent上的值為大寫可能就要注意一下原本的變數是否為小寫如圖1所示:

TextMesh是3D Text上原本就包含的Component,可以發現到他所有變數都為大寫,但使用上並不是這樣。

1.Unity會將開頭的英文字元自動轉換成大寫。例如  text   >   Text。
2.而駝峰式的命名法TextMesh會變成Text  Mesh會讓人誤認為中間有空白字元。





圖1




圖2

var vaule:String;
var scriptName;
var getVaule:String;

function Start(){
    vaule="You See Me";
}

function OnCollisionEnter(target : Collision){//當進入碰撞

    Debug.Log("OnCollisionEnter");

    //取得target(撞到的目標)上的Script名稱
    scriptName=target.gameObject.GetComponent("MySetComponent");
    Debug.Log("Script Name: "+scriptName);

    //取得target(撞到的目標)上Script的值
    getVaule=target.gameObject.GetComponent("MySetComponent").vaule;
    Debug.Log("Get Vaule: "+getVaule);
}

function Update(){
    if(transform.position.x<15)
       transform.position+=Vector3.right*Time.deltaTime*5;
}

var vaule:String;

function Start(){    
    vaule="I Love EasyUnity !";
}


function OnCollisionExit(target : Collision){ //當離開碰撞

    Debug.Log("OnCollisionExit");

    //傳送target(撞到的目標)上Script的值
    target.gameObject.GetComponent("MyGetComponent").vaule="EasyUnity";
    Debug.Log("Target Vaule: "+target.gameObject.GetComponent("MyGetComponent").vaule);
}

結果

1 ♥:

  1. 你好
    我不太能體會其中意思...
    本身使用C# 一時無法轉換

    能否請版主使用C#進行解釋....
    感謝萬分

    回覆刪除