Unity 常用API之Component,GameObject获取组件

根据名字查找

 


   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

获取物体组件(先从自身查找)自身有就返回没有继续查找下一个直到找到该组件为止。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值