Unity——访问物体与组件(包括细节)

Unity——访问物体与组件

GameObject和Transform的区别与关系

区别

GameObject(物体)与Transform(变换)是Unity中两套不同的系统

  • GameObject指的是对象本体,类似于我们人这个实体,每个人都是独立的个体,物体之间原则上没有任何逻辑关系。
  • Transform指的是物体在局内的表现,例如坐标、缩放、行为、碰撞等等,类似于人的外表、技能、其他属性等等,变换之间有所属关系,像人们的工作生活都交织在一起。

联系

  • Transform最基本的属性就是坐标、旋转角以及缩放这三个属性。每一个GameObject唯一对应一个Transform,每一个Transform也唯一对应一个GameObject,所以利用这个特点将两套系统联系起来,Transform有gameObject属性,GameObject也有transform属性。事实上,类似于人类社会,我们并不会太多的去关注GameObject的改变(大家都是人),它的属性很多都是固定的(比如模型的形状),当然我们可以做到操作模型上的每一个像素点,但我们更多的是关注Transform,它的内容更加丰富,可玩性更强,所以一个Transform就代表了一个GameObject的所有表现(除了Active属性)。
  • Transform有所属关系:不同级的物体之间没有所属关系,但不同级物体的Transform之间是有所属关系的,子级的Transform以Component(组件)的身份存在于父级transform之下——外部的Component,Hierarchy面板就是以这个关系来显示物体的。而我们在Inspector面板中添加的组件就成为了transform的属性、方法、表现以及行为等——内部的Component。

这里有一个认知上的重点:GameObject类型里没有cube、spher这些分类,只有在Inspector中添加了相应的组件它才有对应的属性。如果一个Button的Inspector中没有Button这个组件,那也就不是按钮;一个球,它有Button组件,那他就是一个按钮。所以比如用Transform的方法获取Button类型的对象的时候,它在意的不是你创建时是不是在Create里选了Button,而在意一个对象在Inspector里是不是有Button组件,此处也体现出了GameObject与Transform的区别与联系。


访问GameObject(返回值为GameObject类型)

思路

  1. 使用GameObject的Find()系列方法
  2. 使用Transform类型的gameObject属性

GameObject.Find()系列

  • GameObject.Find()系列方法会进行全场景搜索物体,返回GameObject类型的对象或对象数组
  • 只能找到状态为Active的物体,如果一个物体active=false,则他以及他的子物体一个也找不到
  • GameObject.Find()查找同名物体的搜索顺序很奇怪:
    • 顶级物体优先于子物体,顶级物体之间创建时间越晚越优先
    • 只要不是顶级物体:
      • 从上到下顺序优先
      • 子物体优先于父物体
  • GameObject.Find()真的占资源,非要用的话确保不要重名且不要再Update()中调用,尽量用路径
  • 意外发现:如果没有叫“sonson”的物体,而查找“sonson”,会自动找名为son且子物体也为son的部分,返回子物体,只适用于两层物体名连接。
  • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值