53 lines
2.0 KiB
Markdown
53 lines
2.0 KiB
Markdown
![]() |
#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 和编辑器窗口。
|