有很多方法可以做到這一點,這一切都取決於情況以及如何組織項目。
您可以使用GameObject.Find(string)
按名稱找到遊戲對象,您可以使用UnityEngine.Object.FindObjectsOfType(type)
查找包含某個組件的對象(如您的示例)。請注意,出於性能原因,不建議在Update()
方法中調用大多數(全部?)找到方法。
取決於你如何構建您的場景層次,你可以很容易地被相關的對象:在通過Transform
API連接同一層次樹遊戲對象:Transform.parent
將返回父遊戲對象的變換和Transform.GetChild(int)
回報由索引定義的子元素的變換,並且Transform.Find(string)
返回與名稱匹配的子變換(不遞歸)。
他們爲什麼通過Transform
API連接?因爲變換是對象的物理表示,它的位置,縮放和旋轉。其他對象下的對象將遭受其父對象的相同更改。你提到一個對象「跟在」另一個對象上,所以如果你的意思是在之後,這可以簡單地通過將跟隨者置於層次結構的後面來實現。
還有一種編輯方式:如果您在腳本中創建對象的公共引用,Unity將在編輯器中爲它創建一個條目。只需將您的腳本附加到場景中的遊戲對象的公共引用中,即可在「檢查器」窗口中看到引用。然後,您可以將任何其他與您的公共參考類型相匹配的對象拖放到Inspector中的此參考中,並且可以在腳本中使用它。
最後,你可以通過編程方式做到這一點:創建一個包含你的遊戲對象池靜態類,或者使用Singleton模式,無論你在正常的代碼做。
此外,UnityEngine.Object.Instantiate()
將返回參考實例化的對象,所以你可以使用它。接下來,如果您剛剛實例化GameObject
來訪問您的腳本,則還可以使用gameObject.GetComponent<YourScript>()
;像這樣:
public class MyScript : MonoBehaviour {
public void GameObject creator;
public void CreateClone() {
GameObject clone = Instantiate(this);
MyScript myScript = clone.GetComponent<MyScript>();
myScript.creator = this;
}
}