Unity 语法详解之查找游戏物体的方法(含查找隐藏物体)

为了更好的看懂,有一个非常基础的知识,如果不知道可以移步去了解一下哦

unity | gameobject和transform的区别和关联通俗解释_gameobject transform_菌菌巧乐兹的博客-CSDN博客

一、前情提要

大写的GameObject是个类,里面写满了物体有关的代码

小写的gameObject指的是物体本身

大写的Transform是个类,里面写满了和社会关系有关的代码

小写的transform是物体本身的社会关系

大写的Resources是个类,是一个可以控制各种各样资源的类

二、用大写的GameObject查找

我们把GameObject想象成人,那么小写的gameObject就是某个人,大写的就是全人类

你让某一个人去孤孤单单的找人,那可太难了,所以小写的gameObject不支持找人。

只有大写的能找。

1.靠名字找
        //XXX里写物体的名字
        GameObject go = GameObject.Find("XXX");

使用范围和查找顺序:

a.只能找到激活物体(我能找你,但是你藏起来,非要我找,过分了吧)

b.先找自己→和自己同级的→自己的子物体们→自己的父物体和那些没什么直接关系的

(由近及远的找,很好理解的,我让你找东西,你肯定也先看自己有没有,再问问身边的人有没有,实在没有再去问小孩要,小孩没有再去找父母要,父母也没有再去找陌生人)

c.只找一个,先找到谁就谁

2.靠标签找(类似人物特征)

        //XXX里填标签
        GameObject go = GameObject.FindGameObjectWithTag("XXX");
        GameObject[] go = GameObject.FindGameObjectsWithTag("XXX");

使用范围和查找顺序:

a.只能找到激活物体(原因同上,都是通过全人类查找,不管你找啥,原理都一样呗)

b.先找自己→和自己同级的→自己的子物体们→自己的父物体和那些没什么直接关系的

(理由同上,都是通过全人类查找,不管你找啥,原理都一样呗)

c.只找一个时,先找到谁就谁(理由同上,都是通过全人类查找,不管你找啥,原理都一样呗)

d.找一个好几个时,需要个数组都放进去

3.靠挂件找(挂件就指的是组件,我只是觉得它挂在身上,就叫挂件)

        //Image可以换成别的组件
        Image image  = GameObject.FindObjectOfType<Image>();
        Image[] image  = GameObject.FindObjectsOfType<Image>();

使用范围和查找顺序:

a.只能找到激活物体(原因同上)

b.先找自己→和自己同级的→自己的子物体们→自己的父物体和那些没什么直接关系的

(理由同上)

c.只找一个时,先找到谁就谁(理由同上)

d.找一个好几个时,需要个数组都放进去

二、用小写的transform查找

大写的Transform是个类,里面写满了和社会关系有关的代码,可以理解成,里面都是处社会的方法,你有需要可以用这些方法,但是,你不能指望这些守则去给你找人。

小写的transform是物体本身的社会关系,你可以让这个人,问问自己家里人

1.靠名字找
    //XXX里写物体的名字
    Transform t = transform.Find("XXX");

使用范围:

a.只能找到激活物体(理由同GameObject)

b.只找自己孩子

(这里的社会关系指的自己家人,包含父母或者再往上,孩子或者再往下

它默认你找它找人,肯定不是找的它自己,所以它不找自己;

可能国外和父母关系比较疏离,所以它也不找父母,也不找长辈,

最后就只问问自己孩子)

c.只找一个时,先找到谁就谁

d.但是,它也可以委托自己的某个孩子找找,孩子找也服从a-d的规则

Transform t = transform.Find("儿子的名字/想查找的人名");

e.也可以委托孙子找,就继续(子子孙孙无穷尽也)

Transform t = transform.Find("儿子的名字/孙子的名字/想查找的人名");
2.直接找孩子
        //0那里写几就是第几个孩子
        Transform t = transform.GetChild(0);
        //也可以子子孙孙无穷尽也,我第0个孩子的第0个孩子的......
        Transform t = transform.GetChild(0).GetChild(0).GetChild(0).GetChild(0);

使用范围:

a.也能找到隐藏物体,毕竟你都指名道姓了

3.直接找爸爸
        Transform t = transform.parent;
        //也可以爸爸的爸爸叫爷爷
        Transform t = transform.parent.parent.parent.parent;

四、用大写的Resources查找

大写的Resources是个类,各种挂件都能找到

Image[] images = Resources.FindObjectsOfTypeAll<Image>();

使用范围:

a.它不是物体,没有亲疏远近,要找就一堆给你了,不支持找一个

b.隐藏的也能找到(所有物体都属于资源,不管你藏没藏,都在项目里,一捋名单,逃无可逃)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菌菌巧乐兹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值