Да, это еще один вопрос о моем игровом движке, который очень хорошо подходит , большое спасибо вам, ребята.
Итак, если вы смотрели видео (или не смотрели), объекты в игре состоят из различных компонентов, таких как положение, спрайты, движение, столкновение, звуки, здоровье и т. Д. У меня определено несколько типов сообщений для связи типа «сказать» между сущностями и компонентами, но это еще далеко. Есть много раз, когда мне просто нужно что-то спросить, например, о позиции организации.
В моем коде есть десятки строк, которые выглядят так:
SomeComponent comp = (SomeComponent)entity.GetComponent(typeof(SomeComponent));
if (comp != null) comp.GetSomething();
Я знаю, что это очень уродливо, и я знаю, что отливка пахнет неправильным ОО-дизайном. Но, как бы ни были сложны вещи, лучшего пути не существует. Я мог бы, конечно, «жестко закодировать» мои типы компонентов и просто иметь
SomeComponent comp = entity.GetSomeComponent();
но это похоже на отговорку и плохую.
Я буквально только что ПОНЯЛ, когда писал это, после того как мой код был таким образом месяцами без решения, что универсальный поможет мне.
SomeComponent comp = entity.GetComponent<SomeComponent>();
Удивительно, как это работает. Во всяком случае, это все еще только семантическое улучшение. Мои вопросы остаются.
- Это действительно так плохо?
- Какая альтернатива лучше?