調用其他實例的腳本是一種很常用的需求,在Unity3D中實現起來也有多種方法,假設在ScriptB有一個DoSomething函數,如下所示:
using UnityEngine;
public class ScriptB : MonoBehaviour {
public void DoSomething() {
Debug.Log("Hi there");
}
}
在ScriptA中如果要訪問某個GameObject的ScriptB腳本中的DoSomething函數:
using UnityEngine;
public class ScriptA : MonoBehaviour {
public ScriptB other;
void Update() {
other.DoSomething();
}
}
注意ScriptA有一個ScriptB類型的公共變量,這是一個絕妙的小技巧,如此一來你便可以通過編輯器拖拽任何含有ScriptB這一腳本的GameObject至該變量上(因爲是public的,所以暴露於編輯器界面中),Unity會自動識別你需要賦值的不是那個GameObject,而是它所包含的ScriptB腳本。
除此之外,如果你不喜歡這種在編輯器中直接賦值的辦法,你可以通過GameObject.Find(“somename”) 來獲取GameObject:
GameObject go = GameObject.Find("somegameobjectname");
ScriptB other = (ScriptB) go.GetComponent(typeof(ScriptB));
other.DoSomething();
不過需要注意的是GameObject.Find()的執行效率非常低,所以如果可能的話還是儘可能使用“直接賦值法”吧。