01-unity基础api详解

Course: Unity 逆向

🎮 Unity基础API详解(脚本生命周期+对象操作)

核心目标:掌握Unity脚本核心生命周期函数的调用逻辑,学会使用基础API查找、修改Game Object,理解组件激活/实例化的核心概念


Unity脚本的内置函数由引擎自动调用,无需手动触发,核心围绕「对象实例化→激活→运行→销毁」的流程执行。

函数名调用时机核心特点注意事项
🔧 Awake对象被实例化后立即调用仅调用1次,不受激活状态影响初始化对象基础数据(如变量赋值),优先于Start执行
🚀 Start对象第一次激活后调用仅调用1次,依赖激活状态适合初始化需要依赖其他组件的逻辑(如获取组件引用)
🔄 Update游戏每一帧自动调用帧频不固定(默认60帧/秒)处理核心游戏逻辑(如移动、输入检测)
✅ OnEnable对象被激活时调用(包括首次激活)可多次调用(激活一次调用一次)组件激活后执行的逻辑(如开启协程、显示UI)
❌ OnDisable对象被取消激活关卡结束时调用可多次调用(取消激活一次调用一次)组件禁用前执行的逻辑(如关闭协程、隐藏UI)
  1. 对象实例化 → 🔧 Awake(无论是否激活都执行)
  2. 对象激活 → ✅ OnEnable → 🚀 Start(仅首次激活执行)
  3. 游戏运行 → 🔄 Update(每帧执行)
  4. 对象取消激活 → ❌ OnDisable
  5. 关卡结束 → ❌ OnDisable(所有组件自动调用)
对比维度AwakeStart
触发条件对象实例化(场景加载时自动实例化)对象第一次激活(勾选组件/代码激活)
执行优先级更高(先于所有Start执行)更低(后于所有Awake执行)
激活依赖无(未激活的对象也会执行)有(未激活的对象不会执行)
典型用途初始化独立数据(如自身变量、组件引用)初始化依赖数据(如获取其他对象的组件)

  • 功能:查找场景中所有指定类型的对象,返回对象数组(此处类型为GameObject,即查找所有游戏对象)
  • 特点:模板函数,支持查找任意组件/对象类型,适合批量遍历对象

遍历场景中所有Game Object,找到名为「Player」的对象,将其名称修改为「ACC」(或自定义名称)

using UnityEngine;

public class Test : MonoBehaviour
{
    // 1. 启动时执行一次(适合初始化查找)
    void Start()
    {
        // 查找场景中所有GameObject,返回数组
        GameObject[] allObjects = FindObjectsOfType<GameObject>();

        // 遍历所有对象
        for (int i = 0; i < allObjects.Length; i++)
        {
            // 字符串比对,找到名为"Player"的对象
            if (allObjects[i].name == "Player")
            {
                // 修改对象名称
                allObjects[i].name = "ACC";
                Debug.Log("找到Player,已修改名称为:ACC");
            }
        }
    }

    // 2. 每帧执行(验证效果,可注释)
    void Update()
    {
        // Debug.Log("Update每帧执行");
    }
}
  • Debug.Log():在控制台输出日志,用于调试(控制台打开方式:窗口→常规→控制台)
  • 对象名称name:Unity中每个Game Object自带的属性,可直接读取/修改
  • 遍历逻辑:通过for循环遍历对象数组,利用字符串比对精准查找目标对象

  1. 🖥️ 脚本编辑工具设置:若点击「编辑脚本」无法打开,需在「编辑→首选项→外部工具」中手动选择代码编辑器(如Visual Studio)
  2. 📊 控制台使用:日志过多时可点击「Clear」清空,折叠日志需点击控制台左侧折叠按钮
  3. 🔌 组件激活状态:脚本组件的勾选框控制「激活/取消激活」,仅影响OnEnable/OnDisable,不影响Awake(实例化时已执行)
  4. 代码规范:生命周期函数名需严格区分大小写(如OnEnable不能写成onEnable),否则引擎无法自动调用

  • 生命周期函数是Unity脚本的基础,需牢记「Awake先于Start,Update每帧执行,OnEnable/OnDisable对应激活状态切换」
  • FindObjectsOfType<GameObject>()是批量操作对象的核心API,适合逆向查找、批量修改场景对象
  • 激活≠实例化:实例化是对象创建(场景加载时自动完成),激活是对象是否参与游戏逻辑(可手动勾选控制)