Unity自定义编辑器按钮点击等事件持续触发问题求助
Unity自定义编辑器按钮自动触发问题修复
问题描述
制作Unity自定义编辑器时,设置了三个用于修改脚本属性的按钮,但出现异常:无需任何操作,按钮的点击事件就会持续触发,Debug日志循环打印,鼠标悬停窗口时也会触发。
错误原因
核心问题是按钮判断的if语句后错误添加了分号,并且GUILayout.Width(100)的调用位置错误:
- if语句后的分号会让条件判断变成一个空语句,后面的花括号代码块会在
OnInspectorGUI的每一次刷新(编辑器窗口每帧都会执行)时无条件执行,导致按钮逻辑被持续触发。 GUILayout.Width(100)需要作为GUILayout.Button的参数传入,而不是单独写在if语句后。
修复后的完整代码
using UnityEngine; using UnityEditor; [CustomEditor(typeof(Modify))] [CanEditMultipleObjects] public class CloudsEditor : Editor { SerializedProperty powerSetting; string powerSettingText; private void OnEnable() { powerSetting = serializedObject.FindProperty("CloudsOnePowerSetting"); } public override void OnInspectorGUI() { DrawDefaultInspector(); serializedObject.Update(); GUILayout.BeginHorizontal(); GUILayout.Label("Set Clouds Fade"); // 修正:将GUILayout.Width作为Button参数传入,移除if后的分号 if (GUILayout.Button("Fast", GUILayout.Width(100))) { powerSetting.floatValue = 0.001f; powerSettingText = "0.001f"; Debug.Log("Test1"); } if (GUILayout.Button("Medium", GUILayout.Width(100))) { powerSetting.floatValue = 0.0001f; powerSettingText = "0.0001f"; Debug.Log("Test2"); } if (GUILayout.Button("Slow", GUILayout.Width(100))) { powerSetting.floatValue = 0.00001f; powerSettingText = "0.00001f"; Debug.Log("Test3"); } GUILayout.EndHorizontal(); GUILayout.TextField(powerSettingText); serializedObject.ApplyModifiedProperties(); } }
额外优化说明
- 移除了不必要的
Modify myScript = (Modify)target;,使用SerializedProperty本身就支持多对象编辑,更符合Unity编辑器开发的最佳实践。 - 给Slow按钮补充了
powerSettingText的赋值,确保文本框能同步显示当前选中的速度等级。
内容的提问来源于stack exchange,提问作者Darren
相关产品推荐
相关产品推荐

