将列表项约束为结构并实现接口C#
我正在尝试建立一个编辑器,它允许我在Unity中动态设置能力。 我想使用(E)实体(C)组件系统并在运行时构建实体 (C)部件如下所示:将列表项约束为结构并实现接口C#,c#,unity3d,unity-dots,C#,Unity3d,Unity Dots,我正在尝试建立一个编辑器,它允许我在Unity中动态设置能力。 我想使用(E)实体(C)组件系统并在运行时构建实体 (C)部件如下所示: public interface IAbilityStats : IComponentData { } public struct AS_Speed : IAbilityStats { public float Value; } public struct AS_Damage : IAbilityStats { public float Value; } 我
public interface IAbilityStats : IComponentData { }
public struct AS_Speed : IAbilityStats { public float Value; }
public struct AS_Damage : IAbilityStats { public float Value; }
我有一个ScriptableObject,它基本上拥有构建该功能所需的所有数据:
public class AbilitySO : ScriptableObject
{
public List<IAbilityStats> stats;
}
所有组件数据都必须实现IComponentData,并且需要结构化。。。我需要一个特定组件的集合,就像IAbilityStats一样。
我尝试了不同的方法,例如使用通用接口,但这也不起作用,因为我不知道将添加哪些IAbilityStats,只是它们实现了IAbilityStats:
public interface IAbilityStats<T> : IComponentData where T: struct{ }
public struct AS_Speed : IAbilityStats<AS_Speed>{ public float Value; }
public class AbilitySO : ScriptableObject
{
public List<IAbilityStats<>> stats;
}
public接口IAbilityStats:IComponentData其中T:struct{}
public struct AS_Speed:IAbilityStats{public float Value;}
公共类能力so:ScriptableObject
{
公共列表统计数据;
}
如果根本不可能,我也想在这里完成不同的解决方案
谢谢小心:如果将
struct
存储为接口
,那么它将被装箱并表现为引用类型!请参阅,例如,您可以使用类似以下内容:例如公共接口IAbilityStats:IComponentData{}公共接口IAbilityStats:IAbilityStats,其中T:struct{}
。。但是,不阻止任何人直接实现非泛型版本而不受类型限制;)不确定你是否把我的问题解决对了。。。我想把组件类型(结构)存储在某个地方,然后用这些类型构建一个实体。我想我理解了这一部分。。我的评论有什么不对吗?;)嗯,也许我不明白。。。但是我现在应该试什么呢?
public interface IAbilityStats<T> : IComponentData where T: struct{ }
public struct AS_Speed : IAbilityStats<AS_Speed>{ public float Value; }
public class AbilitySO : ScriptableObject
{
public List<IAbilityStats<>> stats;
}