Untiy 生命周期函数

来源:互联网 发布:淘宝品牌销量排名 编辑:程序博客网 时间:2024/06/05 17:19
using System.Collections;using System.Collections.Generic;using UnityEngine;public class Api : MonoBehaviour {void Reset(){//属性面板右键操作 Reset 时执行,此函数只在编辑模式下被调用。Reset最常用于在检视面板中给定一个默认值。 Debug.Log("Reset 我在重置时执行");}void Awake(){//只会被调用一次,在Start方法之前被调用! 主要用于字段值的初始化工作,禁用脚本,创建游戏对象,或者Resources.Load(Prefab) 对象Debug.Log("Awake 我在Statt之前执行");}void OnEnable(){//脚本可用时被调用、如果脚本是不可用的,将不会被调用!Debug.Log("OnEnable 我被调用了");}// Use this for initializationvoid Start () {//只执行一次,在Awake方法执行结束后执行,但在Update方法执行前执行, 主要用于程序UI的初始化操作,比如获取游戏对象或者组件Debug.Log("Start 初始化");}// Update is called once per framevoid Update () {Debug.Log("Update 每帧执行一次");}void FixedUpdate(){//每一帧执行一次!不会跳帧!固定更新。固定更新常用于移动模型等操作Debug.Log("FixedUpdate 我执行了");}void LateUpdate(){//先执行Update,然后才去执行lateUpdate(Update方法执行完,必定接着执行LateUpdate,而Update和FixedUpdate方法的执行顺序不确定,//而且有时候FIxedUpdate执行了多帧,而Update却只执行了一帧,这就是因为跳帧的缘故造成的,只有在所有的update执行完了,再执行一次LateUpdateDebug.Log("LateUpdat 我在update之后执行一次");}void OnGUI(){//在这里面进行GUI的绘制,且GUI是每帧擦除重绘的!仅仅只是绘制!没有生命周期的概念!所有关于绘制GUI的代码,都要直接或者间接地写到OnGUI方法中!Debug.Log("OnGUI 执行速度基本是Update的两倍");}void OnDisable(){//脚本失效时调用,程序结束时调用。如果再启用的话会再调用OnEnable;Debug.Log("OnDisabule 我在失效时被执行");}void OnDestroy(){Debug.Log("OnDEstroy 我在销毁时被执行");}}



生命周期函数执行顺序
Reset -> Awake -> OnEable -> Start -> FixedUpdate -> Update-> LateUpdate -> OnGUI -> OnDisable -> OnDestroy

Start:仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。Start总是在Awake之后执行。

FixedUpdate:固定帧更新,在Unity导航菜单栏中,点击“Edit”–>“Project Setting”–>“Time”菜单项后,右侧的Inspector视图将弹出时间管理器,其中“Fixed Timestep”选项用于设置FixedUpdate()的更新频率,更新频率默认为0.02s。 

Update:帧更新,用于更新逻辑。每一帧都执行,处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在 FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)FixedUpdate,每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。 

LateUpdate: 在所有Update函数调用后被调用,和Fixedupdate一样都是每一帧都被调用执行,这可用于控制脚本逻辑的执行顺序。例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。不然如果物体移动和相机跟随都写在Update就有可能出现获取不到已经更新好的角色位置.
原创粉丝点击