Unity的GameObject和Component

简单了解一下Unity中的GameObject和绑定在GameObject上的Component


GameObjectComponent都是继承自UnityEngine.Object,此Object不同于C#的object

关于Object
  • nameComponentname分享了其所绑定的GameObjectname属性。当修改Componentname属性时,GameObjectname属性也会被修改。或许这个属性是专门为GameObject设计的。
  • GetInstanceID():每一个Object都有一个独一无二的ID
  • Destroy():作为GameObejct调用该方法时,会同时Destroy所有的Component和children;作为Component调用时,只会Destroy自己。Destroy的发生时机值得注意,在Update loop之后,rendering之前,也就是说是在当前帧完成的。当场景发生变化时,当前场景的所有对象会被Destroy,使用DontDestroyOnload()可以阻止。
  • FindObjectOfType():由于使用反射实现,这个方法非常耗时间。
  • Instantiate():这个方法用于克隆GameObject。不论是作为GameObject调用还是作为Component调用,结果都是将相应的GameObject及其children,Component一起克隆。可以通过参数修改位姿,父对象和坐标系等。值得注意的是,克隆后的对象默认是没有父对象的。

然后是GameObject,场景中的所有对象都是GameObject

GameObject就不得不说transfrom,任何GameObject出生都自带Transfrom类型的Component作为其属性。

Transform是用于控制场景中对象的位姿的,除此之外,Transform提供了一个很重要的特性:children。

关于GameObject
  • 激活:只有当该对象的父对象处于激活状态并且该对象的local active状态为true时,该对象才处于激活状态。SetActive()方法仅可修改local active状态。
  • transform:大多数情况下,一个GameObject唯一对应一个Transform
  • 事件:可以通过SendMessage()等方法来调用该GameObject及其父子对象上绑定的MonoBehaviour的方法。(猜想,可能是反射实现的)
  • Component相关:当然有添加与获取的相关方法。
  • Find:Find相关的几个方法非常耗费时间(一个场景成千上万的对象),应该将结果缓存起来。

GameObject说完了就该说Component了。Component一般绑定在GameObject上面:

  • 访问GameObjectComponent有很多方法,属性可以通向GameObejct,如gameObject属性,transform属性,tag属性(注意,Component不需要tag,这个tagname一样,指的是GameObjecttag)。
  • Message和Component相关的方法:这些方法应该是调用了GameObject的同名方法;这样会方便一点吧。

Component有一系列常用子类,如RigidbodyCollider等,其中有一个十分重要,Behaviour(主要是它的子类MonoBehaviour),用的非常多。

BehaviourComponent的主要差异仅在于启用禁用控制上面。就像GameObject有active状态一样,MonoBehaviour也有enable状态。

MonoBehaviour是几乎所有Unity脚本都要继承的类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值