About 1005

Unity基礎教學:執行附加在某物件上的功能

Posted by 楊凱鳴 (KM Yang ) - -

相信大家有時會想要執行附加在某個物件上的某個腳本裡的某個功能。例如,場景裡面有兩個腳本(TestScript與DoScript),分別附加在A與B兩個物件上;當執行TestScript的某個功能時,希望它能呼叫/執行DoScript的某個功能。那這樣該怎麼做呢?有兩個方法可以做的到,範例如下:


■ 方法一:使用「FindObjectOfType」

TestScript
說明:當按下空白鍵時,執行DoScript腳本裡的DoSomeThing

public class TestScript : MonoBehaviour {

void Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
FindObjectOfType<doscript>().DoSomeThing();
}
}
}


DoScript

public class DoScript : MonoBehaviour {

private bool gameover = false;
private int Coins = 1;
private float Num = 0.2f;

public void DoSomeThing(){//注意,要宣告成Public
gameover = true;
Coins += 1;
Num += 0.1f;
//偵測是否有存回
Debug.Log (gameover);
Debug.Log (Coins);
Debug.Log (Num);
}
}


■ 方法二:直接宣告該腳本

TestScript
說明:當按下空白鍵時,執行DoScript腳本裡的DoSomeThing

public class TestScript : MonoBehaviour {

//宣告跟外部腳本相同名稱
//並且在Unity介面指定該物件
//外部腳本需依附在其他物件上
public DoScript script;

void Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
//直接執行外部腳本的Function
script.DoSomeThing ();
}
}
}


DoScript

public class DoScript : MonoBehaviour {

private bool gameover = false;
private int Coins = 1;
private float Num = 0.2f;

public void DoSomeThing(){//注意,要宣告成Public
gameover = true;
Coins += 1;
Num += 0.1f;
//偵測是否有存回
Debug.Log (gameover);
Debug.Log (Coins);
Debug.Log (Num);
}
}


因此,當按下空白鍵時,會執行DoScript腳本裡的DoSomeThing。

範例檔案下載:DoOtherScriptFunction(Unity 5.6.0f3)
範例檔案下載:DoOtherScriptFunction2(Unity 5.6.0f3)

Leave a Reply