Когда вы работаете над долгосрочным проектом, очень важно поддерживать порядок, организованность и масштабируемость. Давайте рассмотрим 3 шаблона проектирования, которые помогут в этом: шаблон наблюдателя, состояния и команды. С точки зрения атрибутов это будут модификаторы заголовка и диапазона.

Шаблоны проектирования

Образец наблюдателя

Шаблон наблюдателя - это шаблон проектирования программного обеспечения, в котором объект, называемый субъектом, поддерживает список своих зависимых элементов, называемых наблюдателями, и автоматически уведомляет их о любых изменениях состояния, обычно вызывая один из их методов. - википедия

Сначала я создаю модельную сцену. Шаблон наблюдателя состоит из субъекта и наблюдателей.

В качестве примера у меня есть 3 наблюдателя - твердые тела машины, которые будут двигаться в любом направлении, когда игрок проходит через объект, триггер куб.

Теперь создам классы наблюдателя и предметные классы. Observer - это абстрактный интерфейс, так как многие объекты должны будут реализовать свои функции самостоятельно.

Субъект содержит список всех наблюдателей, которых он в конечном итоге уведомит.

Все управляется с игрового контроллера.

Мне нужен класс автомобиля:

И мне нужны CarEvents:

И последнее, что мне нужно сделать, это назначить объекты автомобиля игровому контроллеру (его удерживает триггерный куб):

Теперь, когда я нажимаю на триггер, автомобили будут двигаться в соответствии с назначенной мною функцией движения (движение влево, вверх, назад):

Если вы только начинаете учиться разрабатывать игры, вы можете пройти мой курс udemy по разработке Unity для начинающих:



Шаблон команды

Шаблон команды - это шаблон проектирования поведения, в котором объект используется для инкапсуляции всей информации, необходимой для выполнения действия или запуска события в более позднее время. Эта информация включает имя метода, объект, которому принадлежит метод, и значения параметров метода. - википедия

Действительно полезно для таких вещей, как привязка клавиш управления. Без использования шаблона команды реализация управляющих клавиш будет выглядеть примерно так:

Что делать, если у вас есть 20 клавиш, назначенных различным внутриигровым функциям, и вам нужно повторно привязать одну из них? Вам нужно будет все это переписать. Пришло время использовать шаблон команды.

Сначала определите абстрактный интерфейс:

Подготовьте функциональные классы:

Теперь вы можете просто вызвать функцию Execute и поменять ее местами по запросу, когда вам нужно использовать другую функцию для клавиши.

Государственный образец

Шаблон состояния - это шаблон проектирования программного обеспечения, позволяющий объекту изменять свое поведение при изменении его внутреннего состояния. Этот паттерн близок к концепции конечных автоматов. Шаблон состояния можно интерпретировать как шаблон стратегии, который может переключать стратегию посредством вызовов методов, определенных в интерфейсе шаблона. - википедия

Если у вас есть объект, которым вы хотите управлять с несколькими состояниями, вам понадобится конечный автомат, чтобы различать все возможные сценарии, которые могут произойти.

Давайте сначала создадим интерфейсный класс Enemy.

Затем Альфа и Бета враги:

И игровой контроллер, который будет управлять всем.

Теперь состояния будут согласованы между унаследованными членами вражеского интерфейса, и в будущем будет легко вносить изменения в конечный автомат.

Атрибуты Unity C # и организация кода

В Unity вы наверняка уже пробовали что-то вроде этого:

Атрибут Range создает ползунок в инспекторе Unity связанного объекта / скрипта, а заголовок аккуратно разделяет переменные.

Но атрибуты гораздо более полезны, чем это.

Еще одно полезное применение связано с тем, что вы можете получить список полей и классов, к которым применяется атрибут. Это означает, что вам не нужна прямая ссылка на объект!

Это очень полезно при подготовке игры к локализации и переводам, поскольку вам, вероятно, придется переводить сотни или тысячи строк.

Затем вы можете использовать его так:

Позже, когда вам нужно будет добавить переводы, вы можете просто найти все объекты, отмеченные атрибутом ModularText, и установить переведенный текст:

Как вы понимаете, этот метод - находка при кодировании любых элементов пользовательского интерфейса, которые требуют множества дополнительных функций (всплывающих подсказок и т. Д.).

Я сделал код из этой статьи доступным на моем гитхабе.

Также ознакомьтесь с предыдущими частями моей серии игр о разработке! :)





Завтрашняя часть серии будет последней, я закончу работу над игровым дизайном и визуальным стилем создаваемого нами проекта.