Unity生命周期-脚本执行顺序-1

Unity生命周期方法详解

目录

  • 生命周期方法概述
  • Awake方法
  • OnEnable方法
  • Start方法
  • OnDisable方法
  • Update相关方法
  • 最佳实践

生命周期方法概述

Unity脚本的生命周期方法是构建游戏逻辑的基础,每个方法都有其特定的执行时机和用途。了解这些方法是学习Unity必要的一步!!!!!!

生命周期流程图

场景加载
   ↓
  Awake (初始化、获取组件引用)
   ↓
OnEnable (启用组件时)
   ↓
  Start  (开始游戏逻辑)
   ↓
[游戏循环]
   ├→ FixedUpdate (固定时间间隔,物理计算)
   ├→ Update (每帧更新,输入检测)
   └→ LateUpdate (每帧最后,相机跟随)
   ↓
OnDisable (禁用组件时)
   ↓
OnDestroy (销毁对象时)
标注:

Awake是组件被添加到一个激活的游戏对象或者游戏对象第一次被激活时仅调用一次,即使组件处于禁用状态也会被调用,当对象初始化之后立刻被调用。
OnEnable是组件被添加到一个激活的游戏对象时每一次启用被调用,可以调用多次。OnDisable是组件被禁用时调用。
Start是组件启用时在执行UpDate之前仅被调用一次。
当所有的Awake方法全部执行完后才可以执行某一个脚本中的Start方法,Awake和Start的执行顺序不能保证,但可以手动修改脚本的优先级。
Awake中不能完成协程的定义不能使用yield return语句来暂停协程的执行,Start中可以。两者都可以进行协程的调用。
在Start中进行初始化可能会被自定义函数抢先,所以尽量在Awake方法中进行对象初始化,如果存在依赖关系,可以一个放在Awake方法里一个放在Start方法里,可以保证后者在前者初始化前完成初始化,尽量在Awake方法里进行引用赋值,在Start方法里完成游戏逻辑的实现.尽量在Start方法中完成延迟或异步的操作。
Update和FixedUpdate和LateUpdate
Update方法在每一帧被调用,调用的频率与游戏的帧率相关,不同的设备由于不同的帧率时间间隔可能不一致。大多数用来处理输入用户相关逻辑(键盘鼠标),执行动画更新等非物理逻辑,可以进行实时响应和反馈的操作,如想确保不同帧率下有一致的速度,可以使用Time.deltaTime来调整物体的移动。
FIxedUpdate在固定的时间频率(默认0.02s)被调用,通常用来处理物理引擎相关的逻辑。
LateUpdate每帧调用一次,在所有Update方法调用之后,大多用来完成相机跟随脚本跟随摄像机或对象的操作。

示例代码

public class GameLifecycleExample : MonoBehaviour
{
   
    // 1. Awake:初始化和引用获取
    private void Awake()
    {
   
        // 获取组件引用
        GetComponent<Rigidbody>();
        Debug.Log("Awake: 组件初始化");
    }

    // 2. OnEnable:组件启用时
    private void OnEnable()
    {
   
        // 注册事件
        Debug.Log("OnEnable: 组件已启用");
    }

    // 3. Start:开始游戏逻辑
    private void Start()
    {
   
        // 启动游戏逻辑
        Debug.Log("Start: 游戏逻辑开始");
    }

    // 4. Update:每帧更新
    private void Update()
    {
   
        // 处理输入和游戏逻辑
        if (Input.GetKeyDown(KeyCode.Space))
        {
   
            Debug.Log("Update: 检测到输入");
        }
    }

    // 5. FixedUpdate:固定更新
    private void FixedUpdate()
    {
   
        // 处理物理相关
        Debug.Log

你可能感兴趣的:(unity,lucene,游戏引擎,c#,搜索引擎)