Comments 6
Что бы уменьшить количество гемороя можно еще взять готовые ECS библиотеки типа лео или морпеха. Там уже есть набор различных тулов для отладки (типа ворлд браузеров и интеграции с дебагерами), багов поменьше и перф почти наверняка получше чем у самопального велосипеда.
какие данные «состояния действия» вы в итоге храните в компонентах самого NPC, а какие выносите в отдельные сущности/буферы (например, для очередей запросов), и как это решение повлияло на порядок систем в TickableManager и отладку?
Например, для перемещения, я храню у агента (NPC) вот такой набор
private int[] currentCell;
private int[] targetCell;
private int[] prevCell;
private float[] speed;
private int[] pathStep;
private float[] stepProgress;
private byte[] active;плюс для интерполяции (плавного перемещения), цепляю еще такие данные
private float[] interp;
private int[] lastCell;тут прогресс интерполяции от 0 до 1 и предыдущая ячейка (у меня ячеестый грид и я все привязываю к ячейкам пока что. Пока не делаю перемещение внутри ячейки). И да, тут есть дублирование предыдущей ячейки, но я пока забил на него.
В отдельных сущностях хранятся данные самих действий и запросов типа статуса, способа перемещения, идентификатора задачи, целевой клетки.
На порядок систем это не повлияло. Тут же поменялась структура хранения данных, а не логика. Хотя я, поменял порядок одной из вспомогательных систем, но это не связано с переходом на ECS. Добавил возможность указать порядок при регистрации в менеджере. Сигнатура в итоге такая public void Register(ITickable tickable, TickPhase phase = TickPhase.Logic, int order = 1000000);
Не знаю, насколько ответил на вопрос)))
Теперь вопрос: а зачем? Чем плох коробочный ECS от самих Unity, который ставится в три клика в через менеджер пакетов?
Если бы я был профильным геймдев разработчиком (и знал бы, что такое ECS и как с ним работать), я бы 100% так поступил.
Но я самоучка, у меня вообще нет продакшн опыта, аббревиатуру ECS я увидел впервые 3 месяца назад, поэтому для меня этот проект во многом еще и про то, чтобы научиться и понять, как оно работает.
Это как с анализом данных - можно юзать фреймворки, даже не особо глубоко понимая статистику, но лучше (кмк), если ты понимаешь, как именно все эти функции работают и почему именно так
Хотя может кому-то проще учиться на фреймворках, я не спорю.
Я решил попробовать ECS и вот, что из этого вышло