Unity 生命周期函数

2020-10-09 13:50发布

 

namespace UnityApi: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 initialization

    void Start()

    {

        //只执行一次,在Awake方法执行结束后执行,但在Update方法执行前执行, 主要用于程序UI的初始化操作,比如获取游戏对象或者组件

        Debug.Log("Start 初始化");

    }

 

 

    void FixedUpdate()

    {

        //每一帧执行一次!不会跳帧!固定更新。固定更新常用于移动模型等操作

        Debug.Log("FixedUpdate 我执行了");

    }

 

 

    // Update is called once per frame

    void Update()

    {

        Debug.Log("Update 每帧执行一次");

    }

    void LateUpdate()

    {

        //先执行Update,然后才去执行lateUpdate(Update方法执行完,必定接着执行LateUpdate,而Update和FixedUpdate方法的执行顺序不确定,

        //而且有时候FIxedUpdate执行了多帧,而Update却只执行了一帧,这就是因为跳帧的缘故造成的,只有在所有的update执行完了,再执行一次LateUpdate

        Debug.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 -> OnEnable -> 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就有可能出现获取不到已经更新好的角色位置.

 

作者:Czhenya

链接:https://blog.csdn.net/Czhenya/article/details/76461301

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。