Я хочу создать много разных юнитов без необходимости программировать такие вещи, как MoveTo и Attack, действия более одного раза.
Как я вижу, есть два способа сделать это.
- Единый универсальный класс Unit с флагами, который определяет, что он может / не может делать (затем создает экземпляры в статическом массиве и захватывает их при необходимости)
- Абстрактный класс юнитов с абстрактными методами для специфических для Юнита действий, таких как (Атака, Урожай, Патруль), которые затем должны быть реализованы в подклассах , даже если юнит не может ничего собрать.
первый способ сделать это кажется самым простым, но я бы в итоге получил большую часть кода, который не использовался бы для большинства модулей.
Второй способ также может работать. Но если я решу иметь два разных модуля, которые могут собирать ресурсы, у меня будет один и тот же код в двух разных классах, что не похоже на правильный способ сделать это.
Это даже правильный подход к этой проблеме?
В такой игре, как AoE, у каждого юнита есть, как я полагаю, какой-то Список действий / Приказов, мне бы очень хотелось узнать, как добиться чего-то похожего на то, где я могу просто кодировать каждое Действие / Орден один раз, и затем дайте это всем подразделениям, которые нуждаются в указанном действии.
Если мне неясно (весьма правдоподобно) или вам нужна дополнительная информация о том, что именно я ищу, просто спросите меня в комментарии.
источник
gameObject.AddComponent
иgameObject.RemoveComponent
.Moving
означает компонент «этот блок , как правило , способен к движению». Компонент постоянно прикреплен к нему, независимо от того, перемещается устройство или нет. Это не значит, что оно движется прямо сейчас . Хотя вы могли бы также сделать это таким образом, добавляяMoveOrder
компонент к нему и с самим этим компонентом удалить из блока , когда заказ выполнен или отменен.Многие игры используют компонентную систему для сущностей, в которой набор поведений и способностей может быть добавлен к более общему типу юнитов, а не закодирован как часть класса сущности (или эквивалент).
источник
Unity
флаг. В Unity уже есть встроенная система компонентов, и она сильно предпочитает композицию наследованию . Одним простым методом было бы создать aMonoBehaviour
для каждого из ваших типов действий, а затем прикрепить к каждому типу юнита заранее готовые действия, которые он может выполнить (настраивая экземпляры действий с деталями для каждого типа, такими как значения ущерба и затраты). Это позволяет управлять созданием ваших данных, так что вы можете легко создавать множество пользовательских типов.