Когда вы работаете над долгосрочным проектом, очень важно поддерживать порядок, организованность и масштабируемость. Давайте рассмотрим 3 шаблона проектирования, которые помогут в этом: шаблон наблюдателя, состояния и команды. С точки зрения атрибутов это будут модификаторы заголовка и диапазона.
Шаблоны проектирования
Образец наблюдателя
Шаблон наблюдателя - это шаблон проектирования программного обеспечения, в котором объект, называемый субъектом, поддерживает список своих зависимых элементов, называемых наблюдателями, и автоматически уведомляет их о любых изменениях состояния, обычно вызывая один из их методов. - википедия
Сначала я создаю модельную сцену. Шаблон наблюдателя состоит из субъекта и наблюдателей.
В качестве примера у меня есть 3 наблюдателя - твердые тела машины, которые будут двигаться в любом направлении, когда игрок проходит через объект, триггер куб.
Теперь создам классы наблюдателя и предметные классы. Observer - это абстрактный интерфейс, так как многие объекты должны будут реализовать свои функции самостоятельно.
Субъект содержит список всех наблюдателей, которых он в конечном итоге уведомит.
Все управляется с игрового контроллера.
Мне нужен класс автомобиля:
И мне нужны CarEvents:
И последнее, что мне нужно сделать, это назначить объекты автомобиля игровому контроллеру (его удерживает триггерный куб):
Теперь, когда я нажимаю на триггер, автомобили будут двигаться в соответствии с назначенной мною функцией движения (движение влево, вверх, назад):
Если вы только начинаете учиться разрабатывать игры, вы можете пройти мой курс udemy по разработке Unity для начинающих:
Шаблон команды
Шаблон команды - это шаблон проектирования поведения, в котором объект используется для инкапсуляции всей информации, необходимой для выполнения действия или запуска события в более позднее время. Эта информация включает имя метода, объект, которому принадлежит метод, и значения параметров метода. - википедия
Действительно полезно для таких вещей, как привязка клавиш управления. Без использования шаблона команды реализация управляющих клавиш будет выглядеть примерно так:
Что делать, если у вас есть 20 клавиш, назначенных различным внутриигровым функциям, и вам нужно повторно привязать одну из них? Вам нужно будет все это переписать. Пришло время использовать шаблон команды.
Сначала определите абстрактный интерфейс:
Подготовьте функциональные классы:
Теперь вы можете просто вызвать функцию Execute и поменять ее местами по запросу, когда вам нужно использовать другую функцию для клавиши.
Государственный образец
Шаблон состояния - это шаблон проектирования программного обеспечения, позволяющий объекту изменять свое поведение при изменении его внутреннего состояния. Этот паттерн близок к концепции конечных автоматов. Шаблон состояния можно интерпретировать как шаблон стратегии, который может переключать стратегию посредством вызовов методов, определенных в интерфейсе шаблона. - википедия
Если у вас есть объект, которым вы хотите управлять с несколькими состояниями, вам понадобится конечный автомат, чтобы различать все возможные сценарии, которые могут произойти.
Давайте сначала создадим интерфейсный класс Enemy.
Затем Альфа и Бета враги:
И игровой контроллер, который будет управлять всем.
Теперь состояния будут согласованы между унаследованными членами вражеского интерфейса, и в будущем будет легко вносить изменения в конечный автомат.
Атрибуты Unity C # и организация кода
В Unity вы наверняка уже пробовали что-то вроде этого:
Атрибут Range создает ползунок в инспекторе Unity связанного объекта / скрипта, а заголовок аккуратно разделяет переменные.
Но атрибуты гораздо более полезны, чем это.
Еще одно полезное применение связано с тем, что вы можете получить список полей и классов, к которым применяется атрибут. Это означает, что вам не нужна прямая ссылка на объект!
Это очень полезно при подготовке игры к локализации и переводам, поскольку вам, вероятно, придется переводить сотни или тысячи строк.
Затем вы можете использовать его так:
Позже, когда вам нужно будет добавить переводы, вы можете просто найти все объекты, отмеченные атрибутом ModularText, и установить переведенный текст:
Как вы понимаете, этот метод - находка при кодировании любых элементов пользовательского интерфейса, которые требуют множества дополнительных функций (всплывающих подсказок и т. Д.).
Я сделал код из этой статьи доступным на моем гитхабе.
Также ознакомьтесь с предыдущими частями моей серии игр о разработке! :)
Завтрашняя часть серии будет последней, я закончу работу над игровым дизайном и визуальным стилем создаваемого нами проекта.