n | 搜索字符串,可以是直接子项的名称,也可以是查找后代的层次结构路径。 |
Transform 找到的子 Transform。如果未找到名称匹配的子项,则为 Null。
按名称n
查找子项并返回。
如果找不到名称为n
的子项,则返回 null。如果n
包含 '/' 字符,它将像路径名一样访问层次结构中的 Transform。
注意: 如果 GameObject 的名称中包含 '/',则Find 无法正常工作。
注意: Find 不会在 Transform 层次结构中递归下降。
注意: Find 可以找到禁用 GameObject 的 Transform。
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { public GameObject player; public Transform gun; public Transform ammo;
//Invoked when a button is clicked. public void Example() { //Finds and assigns the child named "Gun". gun = player.transform.Find("Gun");
//If the child was found. if (gun != null) { //Find the child named "ammo" of the gameobject "magazine" (magazine is a child of "gun"). ammo = gun.transform.Find("magazine/ammo"); } else Debug.Log("No child with the name 'Gun' attached to the player"); } }
如所述,Find 不会下降Transform 层次结构。 Find 只会在给定的子项列表中搜索命名的Transform。以下示例显示了Find 搜索 GameObject 的结果。每个 GameObject 的名称都在Find 中使用。这就是为什么层次结构同一级别的两个 GameObject 被找到并报告的原因。
一个带有三个子项的 GameObject。Find() 找不到第三个子项。
// ExampleClass has a GameObject with three spheres attached. // Two of these are children of the GameObject. The third // transform, sphere3, is a child of sphere2. Find() does // not find this child.
using UnityEngine;
public class ExampleClass : MonoBehaviour { void Start() { Transform result;
for (int i = 1; i < 4; i++) { string sph;
sph = "sphere" + i.ToString(); result = gameObject.transform.Find(sph);
if (result) { Debug.Log("Found: " + sph); } else { //Find() does not find sphere3 Debug.Log("Did not find: " + sph);
//But we can access it with '/' character or by using GetChild() Transform newresult; newresult = gameObject.transform.Find("sphere2/sphere3");
if (newresult) { Debug.Log("But now found:" + sph); } } } } }