unity脚本的生命周期

初始脚本

using System.Collections;// 导入系统的集合库
using System.Collections.Generic; // 导入系统的泛型集合库
using UnityEngine;// 导入 Unity 引擎

public class Move : MonoBehaviour // 定义一个名为 Move 的公有类,并继承自 MonoBehaviour 类
{
Void Start()//在脚本被加载时执行,在这里可以做一些初始化操作;
    {
    }

    void Update()//在每一帧渲染前执行,可以实现移动、旋转等操作
    {
      
    }
}

MonoBehaviour 类定义在 UnityEngine 命名空间中。在 Unity 引擎中,所有的游戏对象都必须绑定一个继承自 MonoBehaviour 的脚本。MonoBehaviour 类封装了很多 Unity 事件(如 Start、Update、LateUpdate、FixedUpdate、OnCollisionEnter 等等)和相关方法(如 SendMessage、Invoke、InvokeRepeating 等等),可以通过继承 MonoBehaviour 类来使用这些事件和方法。同时,MonoBehaviour 类也提供了一些属性、字段和方法,可以实现访问游戏对象、改变游戏对象的状态、以及协程等功能。

脚本的声明周期函数

 

  1. Awake
        void Awake()
        {
            Debug.Log("hello world");
            //Debug.Log() 是Unity游戏引擎中的一个调试函数
            //它会在Unity编辑器的控制台窗口中输出调试信息。
            //这个函数定义在UnityEngine命名空间中的Debug类中。
        }

    对象被创建时执行一次,在其中打印一句话“hello world”到Unity的控制台中具体地,当对象首次被创建时,Unity会自动调用其中的Awake()方法。这个方法是MonoBehaviour脚本生命周期中的一个方法,在对象被创建时进行初始化和设置,因此通常用于物体的初始化操作。 

  2. OnEnable

     void OnEnable()
        {
            Debug.Log("hello unity");
        }

    在对象激活时执行调用时表示该对象已经被激活并启用。当一个脚本被加入到Unity游戏对象上时,如果这个对象是激活状态,Unity会立即调用它的OnEnable()方法。在这个例子中,当脚本被激活时将会输出一段调试信息。需要注意的是,OnEnable()方法不同于Awake()方法,Awake()方法在对象首次创建时被调用一次,而OnEnable()方法在对象重新被激活时会被调用。通常情况下,我们会在OnEnable()方法中执行需要在对象被激活时需要进的初始化操作,如订阅事件、打开资源等。

  3. Start 

        void Start()
        {
            Debug.Log("hello Start");
        }

    生命周期函数之一。在脚本所绑定的游戏对象第一次被激活时(如场景开始运行或者游戏对象被实例化)Start 函数会被自动调用.

  4.  Update

       void Update()
        {
    // Unity 引擎的一个生命周期函数,它在每一帧更新前自动被调用。
    // Update 常用于实现实时动画、物理模拟、用户输入和场景交互等功能。
    
    //具体来说,Update 可以用于实现如下功能:
    //控制游戏物体的运动行为(如移动、旋转等);
    //执行玩家的输入控制(如键盘、鼠标、手柄等);
    //更新游戏世界中的物理模拟状态(如重力、碰撞、力等);
    //实现游戏 AI 和状态机;
    //处理游戏逻辑和界面交互等。
    //总之,Update 函数是 Unity 引擎非常重要的一个生命周期函数,
    //常用于控制游戏对象的运行行为和交互,可以使游戏更加稳定流畅。
    //但需要注意的是,过多的 Update 函数会影响游戏的性能表现,因此需要谨慎使用和优化。
        }

  5. LateUpdate

        void LateUpdate()
        {
    //和 Update 函数类似,都会在每一帧更新前自动执行。
    //但是,它的执行时间点比 Update 更晚,
    //具体来说,在所有 Update 函数执行完毕后,才会执行 LateUpdate 函数。
    //LateUpdate 常用于控制相机的行为和位置。
    //因为在游戏运行期间,不同的游戏元素可能会不断地移动、旋转,
    //如果相机在 Update 函数中被更新,可能会使相机抖动或移动不够流畅,
    //因此我们可以将相机操作放入 LateUpdate 函数中,
    //确保它是在所有 Update 函数执行完成之后才执行。
    //除了控制相机之外,LateUpdate 还可以用于其它的行为逻辑,
    //例如物体的跟随和平滑移动等。
    //同时需要注意的是,不要在 LateUpdate 函数中修改其他物体的状态,
    //这可能会导致难以发现的不可预知的行为。
        }

  6. FixedUpdate

        void FixedUpdate()
        {
    //固定帧更新函数,与 Update() 函数不同,它的调用频率是固定的。
    //FixedUpdate() 在每一帧结束时被调用,它的调用周期由物理引擎控制,
    //帧率变化时 Update() 函数的调用次数会变化
    //但 FixedUpdate() 的调用次数不会受到帧率的影响。
    //因此,一些需要与物理交互的操作应该放在 FixedUpdate() 中进行
    //比如移动具有刚体组件的物体、进行碰撞检测等等。
    //注意,如果在 Update() 函数中修改具有刚体组件的物体的位置,
    //可能会导致与物理引擎的冲突,造成不必要的问题。
    //需要注意的是,为了调用 FixedUpdate() 函数
    //需要将脚本组件附加到具有刚体组件的物体上,并启用 isKinemactic 属性 ??
    //否则 FixedUpdate() 函数可能无法正常工作。
        }

    编辑->项目设置->时间 可修改固定时间步进

     

  7. OnDisable

        void OnDisable()
        {
    //当脚本或游戏对象被禁用时,就会自动调用该函数
    
    //在游戏中,当我们需要暂停、切换场景或者销毁一个游戏对象时
    //就需要使用到禁用函数,这个时候 OnDisable() 会被自动调用。
    //在 OnDisable 实现一些资源的释放或者清理操作,以便游戏的性能和效率,同时也可以避免游戏出现异常错误。
    //需要注意的是,OnDisable() 函数不应该用来释放所有资源,否则会影响游戏的启动时间。
    //对于OnEnable()所做的初始化操作,应该在Awake()和Start()等函数中实现。
    //一些常见的在 OnDisable() 函数中需要执行的操作包括:取消订阅事件、关闭界面、停止协程、停止音频等等,
    //这些操作都可以为游戏项目提供更好的用户体验和性能。
        }

  8. OnDestory

        void OnDestory()
        {
            Debug.Log("バイバイ unity");
            //当一个游戏对象被销毁时,就会自动调用该函数。(区分销毁与禁用(是否启用)的区别
    
            //在游戏中,当我们需要销毁一个游戏对象时,需使用到销毁函数,这个时候 OnDestroy() 会自动被调用。
            //在 OnDestroy() 函数中,我们可以实现一些资源的释放、清理操作或者停止一些操作,
            //以便游戏的性能和效率,同时也可以避免游戏出现异常错误和内存泄漏等等。
            //需要注意的是,OnDestroy() 函数是在场景卸载后才会被执行的,
            //因此不适合用来释放非对象级别的资源,比如静态变量或常驻内存的单例等等,
            //因为这些资源会在场景卸载之后仍然存在。
            //一些常见的在 OnDestroy() 函数中需要执行的操作包括:
            //释放组件、清空缓存、取消订阅事件、关闭连接等等,
            //这些操作都可以为游戏项目提供更好的性能和效率。
        }

关于多脚本的执行顺序

​​​点击右上角“打开”旁边的Execution… 打开脚本执行顺序面板

对于所有脚本,先执行全部的Awake…

 

 

                   

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值