从 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 属性 暴露它。
所以,我目前正在开发一款涉及 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 属性 暴露它。