2.0 KiB
2.0 KiB
#unity/日常积累
EndChangeCheck
是 Unity 中的一个功能,通常与 EditorGUI.BeginChangeCheck
配合使用,用于检测用户在编辑器界面上进行的更改。它主要用于自定义编辑器或面板,以便在属性值发生变化时执行特定操作。
用法
以下是 BeginChangeCheck
和 EndChangeCheck
的基本用法示例:
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();
}
}
代码说明
EditorGUI.BeginChangeCheck()
:在检查用户输入之前调用,开始监测变化。EditorGUILayout.FloatField
:创建一个浮点数输入字段。EditorGUI.EndChangeCheck()
:结束监测变化,并返回一个布尔值,指示是否有变化发生。- 如果有变化:可以在
if
语句内执行其他逻辑,例如记录更改或更新其他属性。
注意事项
- 使用
BeginChangeCheck
和EndChangeCheck
可以避免在每次更新时都执行逻辑,仅在实际变化发生时执行,提高效率。 - 通常在自定义编辑器脚本中使用这些方法,而不是在运行时代码中。
这种方法是非常常见的 Unity 编辑器编程模式,特别适合自定义 Inspector 和编辑器窗口。