根据名字查找:
private GameObject game;
Transform tran;
game=GameObject.Find("Cube");//查找场景中的所有物体
tran=this.transform.Find("Cube (1)");//需要查找子物体时(找不到自身)
tran=this.transform.Find("Cube (1)/Cube (2)");//子物体的子物体用/表示下一层子物体。
根据标签查找:
game=GameObject.FindGameObjectWithTag("Player");//根据标签名查找
games = GameObject.FindGameObjectsWithTag("Player");
根据组件类型查找:
T tr = GetComponent(typeof(T)) as T;//T为组件类型
T tr = GameObject.FindObjectOfType<T>();
T tr= GameObject.FindObjectOfType(typeof(T)) as T;
例如:
Transform tran;
Transform tr = GetComponent(typeof(Transform)) as Transform;
tran = GameObject.FindObjectOfType<Transform>();
tran = GameObject.FindObjectOfType(typeof(Transform)) as Transform;
GetComponentInParent和GetComponentInChildern:
GetComponentInChildren
获取子物体组件(先从自身查找)自身有就返回,没有继续查找下一个直到找到该组件为止。
GetComponentInChildren<T>();T为要查找的组件类型。
下面以获取网格渲染器为例:
private void Start()
{
//获取网格渲染器
MeshRenderer mesh=this.GetComponentInChildren<MeshRenderer>();
//将网格渲染器中的颜色属性设置为黑
mesh.material.color = Color.black;
}
创建多个Cube父子级关系如图
Game视图下的Cube
将脚本只放在Cube中:
运行程序:
获取组件成功。
如果不激活Cube中的 Mesh Renderer组件
在运行
Cube不会显示黑色 因为Cube的Mesh Renderer组件没有激活,但是Mesh Renderer组件中的Materials属性中的color还是会改变。
将Cube中Mesh Renderer组件Remove 掉
运行:
就是找子类中第一个物体中的该组件。如果第二个也没有就会找第三个 知道找到为止。
只能找一个物体不能找到所有的子物体。
GetComponentsInChildren
可查找都所有子物体
GetComponentInParent
获取父物体组件(先从自身查找)自身有就返回,没有继续查找下一个直到找到该组件为止。