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

Unity中抽象类的SerializeField在检视面板不显示的问题排查

Unity抽象类属性无法在检视面板序列化显示的解决方案

Unity的序列化系统仅针对字段生效,而非属性(get/set访问器),这是你之前尝试各种配置都无效的核心原因。以下是可行的实现方式:

正确代码示例

抽象类定义

保持抽象属性的接口约束,无需额外序列化标记:

public abstract class MyAbstractClass : MonoBehaviour {
    public abstract GameObject ShouldBeSerialized { get; set; }
}

具体类实现

通过私有序列化字段存储数据,用属性实现抽象类的接口:

public class MyConcreteClass : MyAbstractClass {
    [SerializeField] private GameObject _shouldBeSerialized;

    public override GameObject ShouldBeSerialized {
        get => _shouldBeSerialized;
        set => _shouldBeSerialized = value;
    }
}

关键说明

  • 私有字段_shouldBeSerialized添加[SerializeField]后,会被Unity序列化并显示在检视面板中
  • 抽象属性仅作为接口约束,实际数据存储在具体类的序列化字段中
  • 无需给抽象类添加[Serializable],继承自MonoBehaviour的类默认支持序列化(前提是挂载到GameObject上)

补充:若使用virtual属性的情况

如果将抽象属性改为virtual,依然需要依赖序列化字段实现:

抽象类修改

public abstract class MyAbstractClass : MonoBehaviour {
    public virtual GameObject ShouldBeSerialized { get; set; }
}

具体类实现

public class MyConcreteClass : MyAbstractClass {
    [SerializeField] private GameObject _shouldBeSerialized;

    public override GameObject ShouldBeSerialized {
        get => _shouldBeSerialized;
        set => _shouldBeSerialized = value;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:30:11