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

Unity自定义Inspector中无法修改序列化变量值问题求助

问题原因

你的自定义Inspector代码存在核心逻辑缺失,导致speed属性修改无法生效:

  • 使用serializedObject系列API绘制可编辑属性时,没有在绘制前拉取对象最新序列化状态、绘制后提交修改,所有面板修改都是临时状态,不会被实际写入组件,自然会回弹为初始值0
  • speed的[HideInInspector]特性仅会屏蔽默认Inspector的自动绘制,不会影响序列化,属于正常写法,不是问题点

修复方案

修改自定义Editor的OnInspectorGUI方法,补充serializedObject的同步和提交逻辑即可,修复后的完整代码如下:

public class script : MonoBehaviour
{
    [HideInInspector] public float speed;
    public bool usesSpeed;
    
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log(speed);
    }
    
    [CustomEditor(typeof(script))]
    public class edtr : Editor
    {
        public override void OnInspectorGUI()
        {
            // 同步序列化对象的最新数据
            serializedObject.Update();
            
            base.OnInspectorGUI();
            script scrpt = (script)target;
            
            if (scrpt.usesSpeed)
            {
                EditorGUILayout.LabelField("Speed stuff");
                EditorGUILayout.PropertyField(serializedObject.FindProperty("speed"));
            }
            
            // 提交用户修改到组件,支持撤销/重做功能
            serializedObject.ApplyModifiedProperties();
        }
    }
}

补充说明

如果不想用serializedObject的写法,也可以直接手动绘制字段并赋值,写法如下:

scrpt.speed = EditorGUILayout.FloatField("Speed", scrpt.speed);

该写法逻辑更直观,但默认不支持Unity的撤销重做操作,更推荐使用serializedObject的规范写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:15:05