obsidian/笔记文件/2.笔记/EndChangeCheck.md

53 lines
2.0 KiB
Markdown
Raw Permalink Normal View History

2025-03-26 00:02:56 +08:00
#unity/日常积累
`EndChangeCheck` 是 Unity 中的一个功能,通常与 `EditorGUI.BeginChangeCheck` 配合使用,用于检测用户在编辑器界面上进行的更改。它主要用于自定义编辑器或面板,以便在属性值发生变化时执行特定操作。
### 用法
以下是 `BeginChangeCheck``EndChangeCheck` 的基本用法示例:
``` cs
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` 语句内执行其他逻辑,例如记录更改或更新其他属性。
### 注意事项
- 使用 `BeginChangeCheck``EndChangeCheck` 可以避免在每次更新时都执行逻辑,仅在实际变化发生时执行,提高效率。
- 通常在自定义编辑器脚本中使用这些方法,而不是在运行时代码中。
这种方法是非常常见的 Unity 编辑器编程模式,特别适合自定义 Inspector 和编辑器窗口。