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

Unity中如何隐藏父类在Inspector中的序列化变量?

解决Unity父子类序列化字段冲突并隐藏父类字段的问题

错误原因

你遇到的报错是因为Unity序列化系统不允许父类与子类存在同名的被序列化字段。你用new关键字重新声明m_Prompt,即便加了[HideInInspector],这个子类字段默认仍会被序列化(引用类型加protected+new如果没标记[NonSerialized],Unity还是会尝试序列化),最终导致与父类已序列化的m_Prompt冲突。

解决方法

情况1:可以修改父类代码

这是最简洁的方案,从根源调整序列化逻辑:

  • 将父类的字段改为不主动序列化,只在需要显示的子类中手动开启序列化:
    父类代码:
    public class LLM : MonoBehaviour
    {
        // 去掉[SerializeField],让字段仅作为protected成员存在
        protected string m_Prompt;
    }
    
    需要在Inspector显示该字段的子类:
    public class NeedPromptLLM : LLM
    {
        // 手动添加[SerializeField],让该子类的m_Prompt在Inspector中显示
        [SerializeField] protected new string m_Prompt;
    }
    
    不需要显示的子类直接继承即可,Inspector中不会出现m_Prompt。

情况2:无法修改父类代码

此时需要通过自定义编辑器来隐藏父类的序列化字段:

  1. 创建子类的编辑器脚本(放在Editor目录下):
    using UnityEditor;
    using UnityEngine;
    
    [CustomEditor(typeof(YourSubLLMClass))]
    public class SubLLMEditor : Editor
    {
        public override void OnInspectorGUI()
        {
            // 获取序列化对象
            SerializedObject serializedObj = new SerializedObject(target);
            // 遍历父类以外的所有属性并绘制
            serializedObj.Update();
            SerializedProperty prop = serializedObj.GetIterator();
            bool enterChildren = true;
            while (prop.NextVisible(enterChildren))
            {
                // 跳过父类的m_Prompt字段
                if (prop.name == "m_Prompt" && prop.type == "string")
                {
                    continue;
                }
                EditorGUILayout.PropertyField(prop, true);
            }
            serializedObj.ApplyModifiedProperties();
        }
    }
    
  2. 替换代码中的YourSubLLMClass为你的子类名称,这样该子类的Inspector就会自动隐藏父类的m_Prompt字段,同时不会触发序列化冲突。

另外,不要尝试用[HideInInspector] protected new string m_Prompt;这种写法——只要子类字段没加[NonSerialized],就会和父类的序列化字段冲突。如果非要用new,必须搭配[NonSerialized],但这仅能让子类自己的字段不序列化,无法隐藏父类已显示的字段,所以不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:47:06