實體化后,我無法將兩個按鈕分配給預制件。按鈕在場景中,我不知道如何分配它們。拖放當然不起作用。我對此很清楚。當我做類似的事情時
btnnext = GameObject.Find("Next").GetComponent<Button>();
在 Prefabs 腳本的 Start() 函式中它也不起作用。
還有其他解決方法嗎?
uj5u.com熱心網友回復:
正如@slowikowskiarkadiusz 所說,GameObject.Find這不是最好的解決方案,因為它很慢而且容易出錯。但是有一個簡單的解決方案。
在放置在預制件上的腳本上創建一個名為 AssignButton 的公共函式:
class ScriptOnPrefab : MonoBehaviour {
public void AssignButton(Button button) {
btnnext = button;
}
}
在實體化預制件的腳本中,然后鏈接按鈕并分配它們:
var instance = Instantiate(prefab);
var scriptOnPrefab = instance.GetComponent<ScriptOnPrefab>();
scriptOnPrefab.AssignButton(button);
注意:為此ScriptOnPrefab必須位于預制件的根部,請注意子物件。
注意: prefab鏈接為GameObject.
注意:如果您鏈接預制件,則ScriptOnPrefab可以跳過該GetComponent步驟并立即呼叫該Assign方法。
uj5u.com熱心網友回復:
“也不起作用”是指btnnext為 null 還是指.GetComponent<Button>()拋出例外?第一種情況意味著找到的名為“Next”的物件上沒有 Button 組件。您可以檢查您是否希望它具有 Button 組件或者可能有一些稍微不同的東西。您還可以擁有多個名為“Next”的物件,而您得到的物件并不是您期望得到的物件。第二種情況意味著您的物件很可能處于非活動狀態。Find(string)不在非活動物件內搜索。
話雖這么說 -Find(string)在任何方面都不可靠,我建議避免它(它也非常慢)。相反,我會創建一個腳本以放置在帶有按鈕的物件上。在該Awake()方法的腳本內部,我會將 Button 組件的實體分配給某種公共靜態欄位,以便另一個腳本稍后可以選擇它(如果您正在處理兩個按鈕,它可能是一個串列或兩個單獨的欄位。我猜這取決于你的情況)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391163.html
