为了更好的看懂,有一个非常基础的知识,如果不知道可以移步去了解一下哦
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.隐藏的也能找到(所有物体都属于资源,不管你藏没藏,都在项目里,一捋名单,逃无可逃)