【发布时间】:2017-07-17 15:25:45
【问题描述】:
我正在用 C# 编写游戏,我正在使用 SoA 模式来处理性能关键的组件。
这是一个例子:
public class ComponentData
{
public int[] Ints;
public float[] Floats;
}
理想情况下,我希望其他程序员只指定这些数据(如上)并完成它。但是,必须对每个数组进行一些操作,例如分配、复制、增长等。现在我正在使用带有抽象方法的抽象类来实现这些操作,如下所示:
public class ComponentData : BaseData
{
public int[] Ints;
public float[] Floats;
protected override void Allocate(int size)
{
Ints = new int[size];
Floats = new float[size];
}
protected override void Copy(int source, int destination)
{
Ints[destination] = Ints[source];
Floats[destination] = Floats[source];
}
// And so on...
}
这要求程序员在每次编写新组件和添加新数组时添加所有这些样板代码。
我尝试通过使用模板来解决这个问题,虽然这适用于 AoS 模式,但它对 SoA 并没有多大好处(Data : BaseData<int, float> 会非常模糊)。
所以我想听听关于在某处自动“注入”这些数组以减少大量样板代码的想法。
【问题讨论】:
标签: c# templates data-oriented-design