Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将列表项约束为结构并实现接口C#_C#_Unity3d_Unity Dots - Fatal编程技术网

将列表项约束为结构并实现接口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; } 我

我正在尝试建立一个编辑器,它允许我在Unity中动态设置能力。 我想使用(E)实体(C)组件系统并在运行时构建实体

(C)部件如下所示:

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;
}