Я борюсь с пользовательской реализацией ECS в C #.
Я храню свои компоненты в статических классах следующим образом:
internal static class ComponentStorage<T> where T : struct, IComponent
{
private static readonly T[] components = new T[capacity];
public static ref T Get(int index)
{
return ref components[index];
}
public static void Add(T component, int index)
{
components[index] = component;
}
}
Я делаю это по двум основным причинам:
- это позволяет мне хранить мои компоненты - как они есть - в константных структурных массивах
- я могу легко получить компоненты без упаковки / распаковки
Я управляю компонентами внутри класса менеджера с помощью таблиц и т. Д.
Моя реализация пока работает нормально, но я нервничаю, опираясь на этот метод.
- Есть ли что-то, что я пропускаю, например, скрытый бокс из-за общей статики? тесты производительности прошли, как и ожидалось, но я еще не реализовал ни одного вида SystemManager, потому что это довольно сложно, поэтому я не хочу начинать с этого, если я все время ошибаюсь.
Я не смог найти правильный ответ на вопрос static-generic-boxing, и я еще не видел ни одного экса, использующего это.