obsidian/笔记文件/2.笔记/EndChangeCheck.md
2025-03-26 00:02:56 +08:00

2.0 KiB

#unity/日常积累

EndChangeCheck 是 Unity 中的一个功能,通常与 EditorGUI.BeginChangeCheck 配合使用,用于检测用户在编辑器界面上进行的更改。它主要用于自定义编辑器或面板,以便在属性值发生变化时执行特定操作。

用法

以下是 BeginChangeCheckEndChangeCheck 的基本用法示例:

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(MyComponent))]
public class MyComponentEditor : Editor
{
    public override void OnInspectorGUI()
    {
        MyComponent myComponent = (MyComponent)target;

        // 开始监测变化
        EditorGUI.BeginChangeCheck();

        // 绘制一个字段
        myComponent.someValue = EditorGUILayout.FloatField("Some Value", myComponent.someValue);

        // 结束监测变化并检查是否有变化
        if (EditorGUI.EndChangeCheck())
        {
            // 如果值有变化,执行相应的逻辑
            Debug.Log("Value changed!");
            // 可以在这里添加其他操作,比如保存状态等
            // EditorUtility.SetDirty(myComponent); // 标记对象为已修改
        }

        // 继续绘制其他属性或界面元素
        DrawDefaultInspector();
    }
}

代码说明

  1. EditorGUI.BeginChangeCheck():在检查用户输入之前调用,开始监测变化。
  2. EditorGUILayout.FloatField:创建一个浮点数输入字段。
  3. EditorGUI.EndChangeCheck():结束监测变化,并返回一个布尔值,指示是否有变化发生。
  4. 如果有变化:可以在 if 语句内执行其他逻辑,例如记录更改或更新其他属性。

注意事项

  • 使用 BeginChangeCheckEndChangeCheck 可以避免在每次更新时都执行逻辑,仅在实际变化发生时执行,提高效率。
  • 通常在自定义编辑器脚本中使用这些方法,而不是在运行时代码中。

这种方法是非常常见的 Unity 编辑器编程模式,特别适合自定义 Inspector 和编辑器窗口。