要建立在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