You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity自定义Editor中SerializedProperty.enumValueIndex值无法保存求助

问题解决:SerializedProperty枚举值无法保存的原因与修复

核心问题:对象引用不匹配

你的代码里存在一个引用错误:在OnEnable方法中,获取_state属性时误用了Editor类自带的serializedObject,而非你手动初始化的_serializedObject。两者不是同一个实例,导致你修改的属性并未关联到目标对象上,自然无法保存修改。

修复步骤

  1. 修正OnEnable中获取_state的代码,将serializedObject替换为_serializedObject
  2. 移除冗余的SetObjectDirty调用——SerializedObject.ApplyModifiedProperties()已经会自动处理标记对象为脏、保存修改的逻辑,手动调用反而可能引发冲突(尤其在新版Unity中)

修正后的自定义编辑器代码

using UnityEditor;
using UnityEngine;
 
[CustomEditor(typeof(Door))]
public class DoorEditor : Editor
{
    private Door _target;
    private SerializedObject _serializedObject;
 
    private SerializedProperty 
        _state,
        _startPoint;
 
    private void OnEnable() {
        _target = (Door)target;
        _serializedObject = new SerializedObject(_target);
 
        _startPoint = _serializedObject.FindProperty("_startPoint");
        // 修正:使用自己初始化的_serializedObject而非Editor自带的serializedObject
        _state = _serializedObject.FindProperty("_state");
    }
 
    public override void OnInspectorGUI() {
        // 每次绘制前更新SerializedObject,确保属性值同步
        _serializedObject.Update();
        
        EditorGUILayout.BeginVertical("box");
 
        _startPoint.objectReferenceValue = (Transform)EditorGUILayout.ObjectField("Start Point", _startPoint.objectReferenceValue, typeof(Transform), true);
 
        _state.enumValueIndex = (int)(DoorState)EditorGUILayout.EnumPopup("Door State", (DoorState)_state.enumValueIndex);
 
        EditorGUILayout.EndVertical();
        
        // 应用修改,自动处理脏标记与保存
        _serializedObject.ApplyModifiedProperties();
    }
}

额外说明

  • 必须在OnInspectorGUI开头调用_serializedObject.Update(),确保SerializedProperty的数值与目标对象的实际值同步,避免出现显示不一致的问题
  • 新版Unity(2020+)中,EditorUtility.SetDirty已被标记为过时,推荐完全使用SerializedObject/SerializedProperty的工作流来处理Inspector修改
  • 你的Door组件中_state字段已经标记了[SerializeField],完全符合SerializedProperty的访问要求,不需要额外用反射处理私有字段

内容的提问来源于stack exchange,提问作者Aiden VMR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:52:54