从 Unity 中的接口序列化 属性

Serializing a property from an Interface in Unity

所以,我目前正在开发一款涉及 3 种类型建筑的策略游戏:“生产”、“存储”和“精炼”。 任何建筑物都可以属于这些类型中的一种或多种,​​因此存储建筑物也可以是精炼建筑物,然后应该继承这两种类型的功能。

示例:

public class Stronghold : Building, IStorage, IRefining, IProduction
{
    public RefiningOption[] RefiningOptions { get; set; }
}

public interface IRefining
{
    public RefiningOption[] RefiningOptions { get; set; }
}

我开始使用接口来实现这个,但我 运行 遇到了 Unity 不允许序列化属性和接口不能包含字段的问题。

有没有一种方法可以让我以一种简洁的方式从多个不同的类型继承,或者我是不是完全错误地处理了这个问题?我可以想到一个解决方案,该解决方案涉及为每种建筑类型的功能使用单独的组件,但在我实施之前,我想知道“正确”的解决方案是什么。

提前致谢。我正在尝试扩展我的工具集,因此欢迎任何反馈。

就这样?私下创建一个字段。这个私有字段可以序列化

private RefiningOption[] _refiningOptions;
public RefiningOption[] RefiningOptions 
{ 
    get { return _refiningOptions; } 
    set { _refiningOptions = value; } 
}

就像上面的答案一样,但更“紧凑”的方式

[field: SerializeField] public RefiningOption[] RefiningOptions { get; set; }

这是一个 auto-property,它生成一个支持字段,您可以通过键入 [field: "Your_Attribute_Here"] 直接访问该字段,这与具有 [Serialized] 私有字段相同a public 属性 暴露它。