U1L7-5——父子关系
U1L7-5——父子关系
Transform中的父子关系相关
父子化是使用 Unity 时需要理解的最重要概念之一。
当一个游戏对象是另一个游戏对象的__父__项时,__子__游戏对象完全跟随其父项移动、旋转和缩放。
可将父子化看作是手臂与身体之间的关系;每当身体移动时,手臂也随之移动。
子对象也可以有自己的子项,以此类推。所以,手可以视为手臂的“子项”,然后每只手都有几根手指,等等。
任何一个对象都可以有多个子项,但只有一个父项。这些多级父子关系形成了变换组件的_层级视图 。
层级视图最顶层的对象(即层级视图中唯一没有父项的对象)称为__根_。
在脚本中,我们可以用Transform类中的属性和方法来操作父子关系
本章代码关键字
1 | this.transform.parent.name //通过transform获取父对象的的名字 |
获取和设置父对象
1 | //获取父对象 |
设置父对象的方法
-
参数一:选择依附的新父对象
-
参数二:是否保留世界坐标的位置 角度 缩放
-
true
会保留 世界坐标下的状态 和 父对象 进行计算 得到本地坐标系的信息 -
false
不会保留世界坐标系下的各种信息 会直接赋值到本地坐标系下
-
1 | //通过API来进行父子关系的设置 |
1 | this.transform.SetParent(GameObject.Find("Lesson9Father").transform, true); //不会保留世界坐标系下的各种信息 会直接赋值到本地坐标系下 |
放弃所有子对象
抛弃自己的所有子对象(对子对象的子对象不起作用)
1 | this.transform.DetachChildren(); |
获取子对象
按照名字寻找子对象
transform.Find
方法 是可以找到失活的对象的!但GameObject相关方法不能找到
1 | this.transform.Find("Cube"); //只能找到子对象,不能直接找到子对象的子对象 |
虽然该方法效率,比GameObject.Find()相关方法更高一些 但是该方法必须要知道父对象是谁才能找到
遍历父对象的所有子对象(不包括子对象的子对象)
包括失活的子对象,但不包括子对象的子对象
1 | print(this.transform.childCount); //包括失活的子对象,但不包括子对象的子对象 |
通过索引号 去得到自己对应的子对象
通过索引号 去得到自己对应的子对象,如果编号溢出,会直接报错!
返回值 是 transform ,可以得到对应子对象的Transform实例化对象
1 | this.transform.GetChild(0); |
子对象的操作
判断自己的父对象是什么
要做判断的子对象.IsChildOf
(被用于判断是否为父对象的对象),一个对象 判断自己是不是另一个对象的子对象
1 | if (son.IsChildOf(this.transform)) //返回bool |
得到自己作为子对象的编号
1 | print(son.GetSiblingIndex()); |
把自己设置为第一个子对象
1 | son.SetAsFirstSibling(); |
把自己设置为最后一个子对象
1 | son.SetAsLastSibling(); |
把自己设置为指定个儿子
如果填的数值超出范围(无论是过大还是过小)都不会报错 会直接放在最后一个位置
1 | son.SetSiblingIndex(10); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!