要建立在Serlite評論的基礎上,您需要結合其他腳本使用GetComponent
。
public class MyTextUpdater: MonoBehavior
{
public Text SuperText2;
}
應用MyTextUpdater
您ObjectToTagAlong預製(或GameObject
如果不是預製),並在編輯器中,SuperText2的值設置爲要更新(通常這是ObjectToTagAlong遊戲對象的子文本對象)。
現在,只要你想更新您的實例文本對象,instantiatedObjectToTagAlong,你可以這樣做:
MyTextUpdater text = instantiatedObjectToTagAlong.GetComponent<MyTextUpdate>();
if (text!=NULL && text.SuperText2!=NULL) { /*do whatever you need to do on the text.SuperText2 object*/ }
編輯: 當團結實例化一個遊戲對象的副本,它使「深「各種副本,這意味着副本將具有完全相同的兒童GameObjects結構。
Original Copy
- Child A - Child A (copy)
- Child B Instanitate => - Child B (copy)
- - Grandchild A - - Grandchild A (copy)
每個孩子都被自己的新副本實例化。最重要的是,如果Original有一個MonoBehavior腳本指向其中的一個孩子(或孫輩等),Copy將會有一個腳本指向相應的複製子。
MyTextUpdater [Original] MyTextUpdater [Copy]
- SuperText2 = Child B => - SuperText2 = Child B (copy)
至於爲什麼有額外的腳本(MyTextUpdater腳本)的問題:
原來只是一個遊戲對象。在編輯器中,你可以看到它有孩子,但這不代表一個班級。你不能做這樣的事情在腳本:以同樣的方式
Original.ChildB.Text = "Hello World!";
,你不能做到這一點:
Copy.ChildB.Text = "Hello Copy World!";
您可以創建代碼,通過遊戲對象的所有子迭代尋找一個正確名稱(「ChildB」)的孩子,但這是低效的,可能是糟糕的編程。 更好的方法是創建一個腳本類,它實際上可以讓您訪問該孩子作爲該類中的一個字段。而這其中MyTextUpdater
劇本進來
這將是無效的。
GameObject Copy = Instantiate(Original);
Copy.SuperText2.Text = "Some text here";
拷貝沒有一個字段或方法稱爲SuperText2,或ChildB,或任何你會調用它。但是,你可以這樣做:
GameObject Copy = Instantiate(Original);
MyTextUpdater mtu = Copy.GetComponent<MyTextUpdater>();
mtu.SuperText2.Text = "Some text here";
假設,當然,你應用的MyTextUpdater腳本原件及作出子文本組件正確連接。
你知道'GetComponent()'方法嗎?這聽起來像你所需要的,除非你實際上試圖做一些事情,而不是在實例化的GameObject上修改一個'Text'組件。 – Serlite
嗯,那實際上能夠過濾一個特定的文本? 例如,如果我有一個稱爲超文本文本框2 我可以說 文本SuperText2 <<(然後分配在Unity的對象) 文本newUpdatedText = gameObject.GetComponent(typeof運算(SuperText2))作爲SuperText2; 然後newUpdatedText.Text =「新文本」 – Tvt
呃...如果你的組件是'SuperText2'類型,那麼你可能可以做到這一點 - 如果你包含你的屏幕截圖,對象層次結構,並指出您想要修改的內容。 – Serlite