前言
在unity中,继承自MonoBehaviour的方法会在运行中被unity的框架自动调用一些方法,在我们实际使用的时候,这些方法能方便我们做一些资源初始化,或者一些状态的变化修改逻辑。在此我就简单说说一些基础的方法。
方法介绍
下面介绍一下经常用到的方法的名字
- Awake()
- OnEnable()
- Start()
- FixedUpdate()
- Update()
- LateUpdate()
- OnGUI()
- OnDisable()
- OnDestory()
- OnEnable()
我们在unity里新建一个脚本的时候Unity会自动给我们生成一个继承自MonoBehavior的一个c#脚本,里面会自动生成Awake(),Start(),Update()这三个方法,这三个方法也是我们经常要用到的。
方法调用
上述方法是在脚本挂在gameobject的时候由Unity自动调用的,不管方法被设置为private还是public,都能被unity所执行到,所以这些方法名可以被当做为unity的保留字段,当脚本挂载的gameobject为激死状态的时候,上述方法将不会被执行,只有当物体被激活了才会被执行(当然也可以由自己手动调用);这里需要标注一件事,就是当物体是激死状态下被挂载脚本,这个脚本是不会被触发的,但是当你脚本挂载上去后再去激死激活物体是能执行特定脚本的;所以挂载需要分两个解释,一个是挂上去了,一个是被系统加载到。
方法顺序
上述方法的调用时有一个先后顺序的,所以我们在使用的时候,做一些逻辑判断的时候就可以使用到这样的一个优先顺序的。这个顺序为激活顺序,关闭销毁顺序。
激活顺序
Awake>OnEnable>Start>FixedUpdate>Update>LateUpdate>OnGUI
销毁顺序
注意这里是销毁物体的函数调用
OnDisable>OnDestroy
调用次数
只调用一次
Awake(),Start(),OnDestory()这三个方法为只调用一次。
多次调用
OnEnable(),OnDisable(),FixedUpdate(),Update(),LateUpdate(),OnGUI这些方法为多次调用,但是其中的调用时机也是有所区别的,有的是循环调用:Update,FixedUpdate,LateUpdate这三个方法为循环调用,只要脚本属于在执行状态就会被循环调用。OnEnable为脚本切换为执行状态就会触发,OnDisable为脚本被切换到不可执行状态下触发(可执行和不可执行分为父节点被关闭/打开,自己被关闭/打开,脚本被关闭/打开)。OnGUI这个方法比较特殊只要触碰到整个Unity的界面都会被触发。
方法说明
Awake
Awake这个方法属于脚本挂载到gameobject上的时候只激活一次的方法,为最优先的方法,可用来做信息初始化。当脚本是被关闭状态初始化出来一个激活的gamobject的时候,awake是会被执行的。
OnEnable
这个方法属于脚本被激活和gameobject都被激活的时候就会调用到的一个方法。
Start
这个方法是属于脚本只调用一次的方法,属于脚本和gameobject都被激活的时候才调用的一个方法。
FixedUpdate
是用于独立的帧频运行的一个方法一般用于物理信息计算,属于在固定时间会调用到这个方法的。可以在系统中设置这个调用的时长。Time.fixedDeltaTime 为两个FixedUpdate之间的运行时间
Update
这个方法属于在物体和脚本都激活的状态下,每帧都会执行的一个方法。两个Update方法之间的执行时间可查询Time.deltaTime.
LateUpdate
这个也是在脚本和物体都激活的状态下每帧都会执行的一个方法,在Update后执行,可以做一些跟随一类的事情。两个LateUpdate方法之间的执行时间可查询Time.deltaTime.
OnGUI
这个方法也是必须在物体和脚本都激活的状态下执行的,执行次数可能达到每帧执行多次的。具体情况需要具体探究
OnDisable
这个方法是物体或者脚本被激死的时候都会调用的一个方法。脚本被从物体上删除也会调用到的一个方法或者物体被删除也会调用
OnDestory
这个是物体被删除或者脚本被从物体上删除会调用的一个方法,但是必须得脚本是在执行状态下才会有反应。
补充
在说上述一些方法的时候,说到一个这样的概念,就是有些方法在脚本激死的状态下是不会被激活的,在看官方文档的时候发现脚本在没有Start(),Update(),FixedUpdate()
,LateUpdate(),OnGUI(),OnDisable(),OnEnable(),这几个方法的时候脚本的前面是没有一个复选框的,所以这个时候也是没有脚本激死激活的状态。