r01*_*128 16 c# unity-game-engine
我知道这是一个有点愚蠢的问题,但是我将如何通过脚本(脚本附加到游戏对象)引用游戏对象的子项(立方体)。(相当于 GetComponent 之类的东西)
Pro*_*mer 29
通过索引查找子游戏对象:
您可以使用该GetChild函数获取 GameObject 的第一个孩子。
GameObject originalGameObject = GameObject.Find("MainObj");
GameObject child = originalGameObject.transform.GetChild(0).gameObject;
Run Code Online (Sandbox Code Playgroud)
您可以通过向GetChild函数提供子 GameObject 的索引号(例如 1,2,3)来获取其他子项。
如果它是原始游戏对象中孩子的孩子?我只需要重复一遍还是只是第 n 次
您首先找到孩子,然后从参考中找到那个孩子的孩子。
假设这是 OriginalGameObject/Prefab 层次结构:
如您所见,OriginalGameObject是child1,child2和的父级child3。childOfChild3 是 的孩子child3。
假设您要访问childs并且您只有OriginalGameObject对父 GameObject 的引用:
//Instantiate Prefab
GameObject originalGameObject = Instantiate(prefab);
//To find `child1` which is the first index(0)
GameObject child1 = originalGameObject.transform.GetChild(0).gameObject;
//To find `child2` which is the second index(1)
GameObject child2 = originalGameObject.transform.GetChild(1).gameObject;
//To find `child3` which is the third index(2)
GameObject child3 = originalGameObject.transform.GetChild(2).gameObject;
Run Code Online (Sandbox Code Playgroud)
索引从开始,0所以真正的索引号index-1就像数组一样。
现在,要获取childOfChild3哪个是其子级的child3引用,但您只能引用OriginalGameObject哪个是父级 GameObject:
首先,获取参考child3然后从中获取childOfChild3。
GameObject mychild = originalGameObject.transform.GetChild(2).gameObject;
GameObject childOfChild3 = mychild.transform.GetChild(0).gameObject;
Run Code Online (Sandbox Code Playgroud)
通过循环索引查找 [所有] 子游戏对象:
遍历 originalGameObject 的所有子对象:
GameObject originalGameObject = Instantiate(prefab);
for (int i = 0; i < originalGameObject.transform.childCount; i++)
{
GameObject child = originalGameObject.transform.GetChild(i).gameObject;
//Do something with child
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用该transform.FindChild功能按名称查找孩子。我不建议你这样做。当多个孩子共享相同的名字时,它看起来很慢并且会发生冲突。这就是为什么你使用GetChild.
按名称查找子游戏对象:
GameObject child1 = originalGameObject.transform.FindChild("child1").gameObject;
GameObject child2 = originalGameObject.transform.FindChild("child2").gameObject;
GameObject child3 = originalGameObject.transform.FindChild("child3").gameObject;
Run Code Online (Sandbox Code Playgroud)
要查找childOfChild3,您可以/像使用文件目录一样使用“ ”轻松完成此操作。您提供parent/child当时的名称。的父级childOfChild3是child3。所以,我们childOfChild3/child3在 FindChild 函数中使用。
GameObject childOfChild3 = originalGameObject.transform.FindChild("child3/childOfChild3").gameObject;
Run Code Online (Sandbox Code Playgroud)
查找附加到子 GameObject 的脚本/组件:
如果您只想要附加到子游戏对象的脚本,请使用GetComponentInChildren:
MyScript childScript = originalGameObject.GetComponentInChildren<MyScript>();
Run Code Online (Sandbox Code Playgroud)
如果有多个孩子使用相同的脚本,而您只想将所有脚本附加到它们上,请使用GetComponentsInChildren:
MyScript[] childScripts = originalGameObject.GetComponentsInChildren<MyScript>();
for (int i = 0; i < childScripts.Length; i++)
{
MyScript myChildScript = childScripts[i];
//Do something with myChildScript
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51701 次 |
| 最近记录: |