GameObject公共函数:
1、GameObject.GetComponent
如果游戏对象附加了类型为 type
的组件,则将其返回,否则返回 null。
使用 gameObject.GetComponent 将返回找到的第一个组件,并且未定义顺序。如果预期存在多个相同类型的组件,请改用 gameObject.GetComponents,并针对某些唯一的属性循环使用返回的组件测试。
go的Active,组件的enable,go的activeInHierarchy 的状态均不影响查找
public GameObject go;
var g = go.GetComponent<Button>();//通用版本
var g = go.GetComponent(typeof(Transform))as Transform;
2、GameObject.GetComponentInChildren
使用深度首次搜索返回 GameObject 或其任何子项中类型为 type
的组件。第一个会返回父物体
仅当在活动 GameObject 上发现组件时才返回该组件。
go的Active,组件的enable,go的activeInHierarchy 的状态均不影响查找
var g = go.GetComponentInChildren<Transform>();//返回包括自身的第一个对象
//组件或物体的激活状态不影响其寻找
3、GameObject.GetComponentsInChildren
返回 GameObject 或其任何子项中类型为 type
的所有组件。返回父物体及其子物体
Unity 以递归方式在子 GameObject 上搜索组件。这意味着,它还包含目标 GameObject 的子 GameObject 以及所有后续子 GameObject。注意:如果请求的类型是 MonoBehaviour 的衍生并且无法加载关联的脚本,此函数将为该组件返回“null”。
子物体的第一个状态Active为false时,就不会继续往下获取,第一个Active为false的物体也不会被找到。寻找子物体的父物体go.Active为false时,返回父类及其所有Active为true的子类;go.Active不为false时,从父往子遍历,收集所有activeInHierarchy为true的父和子。组件的enable不影响查找。
go.GetComponentsInChildren<Transform>().ToList().ForEach(x=>Debug.Log(x));
4、GameObject.GetComponentInParent
返回 GameObject 或其任何父项中类型为 type
的所有组件。返回自身或自身的父对象。
自身Active为true时返回自身,自身Active为false时自身往上父物体遍历,返回第一个Active为true的父对象。组件的激活状态不影响父类查找。
组件搜索是在父对象上以递归方式执行的,因此包含父项的父项,依此类推。注意:如果请求的类型是 MonoBehaviour 的衍生并且无法加载关联的脚本,此函数将为该组件返回“null”。
从自身往父遍历,自身activeInHierarchy为true时返回自身,为false时返回activeInHierarchy为true的第一个父类,组件的enable不影响查找。
var g = go.GetComponentInParent<BoxCollider>();
5、GameObject.GetComponentsInParent
返回 GameObject 或其任何父项中类型为 type
的所有组件。
组件搜索是在父对象上以递归方式执行的,因此包含父项的父项,依此类推。注意:如果请求的类型是 MonoBehaviour 的衍生并且无法加载关联的脚本,此函数将为该组件返回“null”。
从自身往父遍历,自身activeInHierarchy为true时返回包括自身及其所有父类,为false时返回activeInHierarchy为true的所有父类,组件的enable不影响查找。
go.GetComponentsInParent<BoxCollider>().ToList().ForEach(x=>Debug.Log(x));
静态函数:
6、GameObject.Find
按 name
查找 GameObject,然后返回它。
此函数仅返回活动 GameObject。如果未找到具有 name
的 GameObject,则返回 null。如果 name
包含“/”字符,则会向路径名称那样遍历此层级视图。
出于性能原因,建议不要每帧都使用此函数,而是在启动时将结果缓存到成员变量中,或者使用 GameObject.FindWithTag。
**注意:**如果您要查找子 GameObject,使用 Transform.Find 通常会更加轻松。
**注意:**如果正在使用多个场景运行此游戏,则 Find 将在所有这些场景中进行搜索。
var g = GameObject.Find("Player");//返回activeInHierarchy为true的对象
var g = GameObject.Find("/Cube");//Cube在层次结构视图中不能有父级。
var g = GameObject.Find("Cube/Player/Player/Player/Player");//遍历层级视图
var g = GameObject.Find("/Cube/Player/Player/Player/Player");//遍历层级视图
7、GameObject.FindWithTag
返回一个标记为 tag
的活动 GameObject。如果未找到 GameObject,则返回 null
。
在使用标签之前,必须先在标签管理器中声明标签。如果标签不存在,或将空字符串或 null
作为标签传递,将抛出 UnityException
。
**注意:**此方法返回它找到的具有指定标签的第一个 GameObject。如果一个场景包含多个具有指定标签的活动 GameObjects,则无法保证此方法返回特定 GameObject。
返回activeInHierarchy为true的对象。
var g = GameObject.FindWithTag("Player");
8、GameObject.FindGameObjectsWithTag
返回标签为 tag
的活动 GameObjects 的数组。如果未找到任何 GameObject,则返回空数组。
返回activeInHierarchy为true的所有对象。
var g = GameObject.FindGameObjectsWithTag("Player");
Transform公共函数
1、Transform.Find
按 n
查找子项,然后返回它。返回activeInHierarchy为true的对象。
如果未找到具有 n
的子项,则返回 null。 如果 n
包含“/”字符,它将像访问路径名称那样访问层级视图中的变换。
__注意:__.Find 不在变换层级视图中执行递归向下查找。
public Transform go;
var g = go.Find("Player");//返回activeInHierarchy为true的对象
var g = go.Find("/Cube");//Cube在层次结构视图中不能有父级。
var g = go.Find("Cube/Player/Player/Player/Player");//遍历层级视图
var g = go.Find("/Cube/Player/Player/Player/Player");//遍历层级视图
2、Transform.GetChild
按索引返回变换子项。
如果该变换没有子项,或者 index 参数的值大于子项数,则会生成错误。在这种情况下,将给出“Transform child out of bounds”错误。子项数可以由 childCount 提供。
go的Active,go的activeInHierarchy ,孩子的Active,activeInHierarchy 的状态均不影响查找孩子
var g = go.GetChild(0);//返回第一个孩子
3、Transform.SetParent
public Transform go;
public Transform g;
go.SetParent(g);//g是go的父类