Unity 脚本基类 MonoBehaviour 与 GameObject 的关系

一、MonoBehaviour 的生命周期

MonoBehaviour 是 Unity 中所有脚本的基类,如果你使用JS的话,脚本会自动继承MonoBehaviour。如果使用C#的话,你需要显式继承MonoBehaviour。

在我们使用MonoBehaviour的时候,尤其需要注意的是它有哪些可重写函数,这些可重写函数会在游戏中发生某些事件的时候被调用。我们在Unity中最常用到的几个可重写函数是这几个:

  • Awake:当一个脚本被实例化时,Awake 被调用。我们大多在这个类中完成成员变量的初始化。

  • Start:仅在 Update 函数第一次被调用前调用。因为它是在 Awake 之后被调用的,我们可以把一些需要依赖 Awake 的变量放在Start里面初始化。 同时我们还大多在这个类中执行 StartCoroutine 进行一些协程的触发。要注意在用C#写脚本时,必须使用 StartCoroutine 开始一个协程,但是如果使用的是 JavaScript,则不需要这么做。

  • Update:当开始播放游戏帧时(此时,GameObject 已实例化完毕),其 Update 在 每一帧 被调用。

  • LateUpdate:LateUpdate 是在所有 Update 函数调用后被调用。

  • FixedUpdate:当 MonoBehaviour 启用时,其 FixedUpdate 在每一固定帧被调用。

  • OnEnable:当对象变为可用或激活状态时此函数被调用。

  • OnDisable:当对象变为不可用或非激活状态时此函数被调用。

  • OnDestroy:当 MonoBehaviour 将被销毁时,这个函数被调用。

下面用一张图来更形象地说明一下这几个类的在MonoBehaviour的生命周期中是如何被调用的:


这里写图片描述

二、MonoBehaviour 的那些坑

  • 私有(private)和保护(protected)变量只能在专家模式中显示。属性不被序列化或显示在检视面板.

  • 不要使用命名空间(namespace)

  • 记得使用 缓存组件查找, 即在MonoBehaviour的长远方法中经常被访问的组件最好在把它当作一个私有成员变量存储起来。

  • 在游戏里经常出现需要检测敌人和我方距离的问题,这时如果要寻找所有的敌人,显然要消耗的运算量太大了,所以最好的办法是将攻击范围使用Collider表示,然后将Collider的isTrigger设置为True。最后使用OnTriggerEnter来做攻击范围内的距离检测,这样会极大提升程序性能。

三、Monobehaviour 常用方法

不可重写函数:

  • Invoke

    function Invoke (methodName : string, time : float) : void
    在 time 秒之后,调用 methodName 方法;

    
    public class exampl
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值