unity生命周期函数

239 阅读2分钟

常见的生命周期函数

Reset()

调用情况:此函数只能在程序不运行时调用

调用时间:当脚本第一次挂载到对象身上,或使用Reset命令调用

调用次数:此函数只会调用一次

作用:初始化脚本的各个属性

Awake()

调用情况:

  1. 在调用场景时
  2. GameObject从未激活状态变为激活状态
  3. 在初始化使用Instantiate创建GameObject之后

调用时间:在脚本实例的生存期间内

调用次数:仅调用一次

作用:Awake代替构造函数来进行初始化

OnEnable()

调用情况:依附的GameObject对象每次被激活时调用

调用时间:每次GameObject对象或脚本被激活时调用一次

作用:重复赋值,变为初始状态

OnDisable()

当对象被禁用时调用,脚本被禁用时,游戏对象被销毁时调用

作用:对于一些状态的重置,资源回收与清理

Start()

调用情况:进行第一帧更新之前才会执行,只有在GameObject 被激活后才会被调用

在Awake之后Update.之前执行,方便控制逻辑的先后调用顺序

Fixed Update()

主要用于物理更新,每个固定时间间隔执行。

FixedUpdate的帧率是固定的,由FixedTimestepd的值决定,时间设置在Project setting一>Time一>Fixed Timestep中设置。

但每一帧的时间间隔不固定,如果每帧都有大量的运算,为了避免运算超时影响主帧(Update),逻辑运算受临界值MaximumAllowedTimestep控制,超出时间就会退出运算。

Update帧率不固定,会受到时间缩放的影响,会出现卡顿的情况。

调用FixedUpdate的频度常常超过Update。

Update()

主要用于处理游戏核心逻辑更新

实时更新数据,接受输入数据,每帧调用,每秒60次左右。

Late Update()

一般用于处理摄像机位置更新相关的内容,Update和Late Update之间,Unity进行了一些处理,对动画相关的更新,影响渲染的结果,如果在Update中更新摄像机,即摄像机位置变化后再更新动画。可能会出现渲染的错误,其运行帧率与Update相同。

OnApplicationQuit()

在程序退出之前所有游戏对象都会调用这个函数

在编辑器中用户终止播放模式时调用

在网页视图关闭时

满足以上情况调用一次,用于处理游戏退出后的一些逻辑

OnDestroy

当物体被销毁时调用,对象存在的最后一帧更新完之后的所有Update函数执行完之后执行。

用于销毁一些游戏物体

Destory(GameObject,time)