Я думал попробовать компонентную архитектуру для разработки игр. Я прочитал некоторые сообщения в блоге и статьи об этом, но у меня есть несколько вещей, которые я еще не разобрался. Когда я говорю «на основе компонентов», я имею в виду, что вы можете добавлять компоненты в ComponentManager, который обновляет все компоненты в его списке. Я хочу попробовать это, чтобы избежать получения классов, которые наследуют переменные и функции, которые им не нужны. Мне очень нравится идея иметь действительно простой класс сущностей с множеством компонентов, работающих бок о бок, не раздутый. Кроме того, легко удалить и добавить функциональность во время выполнения, что делает его действительно крутым.
Это то, к чему я стремлюсь.
// this is what the setup could be like
entity.componentManager.add(new RigidBody(3.0, 12.0));
entity.componentManager.add(new CrazyMagneticForce(3.0));
entity.componentManager.add(new DrunkAffection(42.0, 3.0));
// the game loop updates the component manager which updates all components
entity.componentManager.update(deltaTime);
Связь: некоторые компоненты должны взаимодействовать с другими компонентами
Я не могу полагаться на то, что компоненты являются самодостаточными. Когда-нибудь им нужно будет общаться с другими компонентами. Как мне это решить? В Unity 3D вы можете получить доступ к компонентам, используя GetComponent()
.
Я думал о том, чтобы сделать это так, но что произойдет, если у вас есть два компонента одного типа? Может быть, вы вернете Вектор.
var someComponent : RigidBody = _componentManager.getComponent(RigidBody);
Приоритет: некоторые компоненты необходимо обновить раньше других
Некоторые компоненты необходимо обновить раньше других, чтобы получить правильные данные для текущего игрового цикла. Я думаю о добавлении приоритета к каждому компоненту, но я не уверен, что этого достаточно. Unity использует LateUpdate и Update, но, возможно, есть способ получить еще лучший контроль над порядком выполнения.
Ну вот и все. Если у вас есть какие-либо мысли, не стесняйтесь оставить комментарий. Или, если у вас есть хорошие статьи или блоги об этом, я с удовольствием их посмотрю. Спасибо.
Компонентный дизайн игрового движка
http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
EDIT:
Мой вопрос - как решить проблему с приоритетами и связью между компонентами.