перечисления

Использование перечислений — это действительно полезный способ отделить и упорядочить поведение, управляемое состоянием, сохраняя при этом код чистым и легко читаемым. Перечисления также отлично подходят для облегчения жизни другому дизайнеру или даже себе. Давайте идти!

Выбор сложности

Вот скрипт Difficulty с закрытым enum, который называется DifficultySelector. Pascal case — это стандартный формат для объявления и именования вашего enum. Откройте несколько фигурных скобок и перечислите различные состояния, между которыми нужно переключаться. Важно использовать запятую после каждого имени состояния, оставляя последнее состояние без без запятой. Здесь перечисление DifficultySelector имеет состояния для Легко, Обычно, Сложно и Эксперт. Внизу объявляется переменная для хранения текущего уровня сложности. Мы можем использовать это, чтобы назначить выбранную сложность.

При желании вы можете указать свои штаты в одной строке.

По умолчанию значения будут работать как система элементов. Начните с ноля, а затем подсчитайте. Слабый, будет иметь значение int, равное 0, а Средний будет иметь intзначение 1. Strong и OP будут иметь int значения 2 и 3 соответственно. При необходимости здесь можно назначить другие значения, как показано ниже. Теперь эти состояния будут возвращать значение int для своего жестко закодированного значения (2,5,8,12).

Просмотр переменной Текущая сложность в инспекторе показывает хороший раскрывающийся список, который используется для установки состояние перечисления.

Доступны все варианты сложности.

enum сам по себе ничего не делает. Для работы требуется некоторая логика, поэтому давайте воспользуемся оператором switch для переключения между состояниями текущей переменной перечисления сложности. Для каждой сложности в перечислении селектора сложности создан кейс. Сообщение Отладка выведет на консоль выбранный уровень сложности.

Приведение значений

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

Поведение врагов

Использование перечисленийдля поведения, управляемого состоянием, — это как раз то, что нужно вражеской системе искусственного интеллекта. Этот скрипт EnemyBehavior прикреплен к нескольким различным кубам врагам в представлении сцены. Все они имеют 100 единиц здоровья и состояния для Патруль, Следование, Атака, Защита, Уклонение и Смерть. enum Enemy State можно циклически переключать с помощью переменной current state.

В void update я запускаю метод под названием Change Enemy State, который на данный момент вызывает метод, который запустит поведениесценарий действия для вражеский объект.

Начало этой функции будет использовано в следующем примере, но здесь Состояние врага сбрасывается на Патруль, если значение int состояния пытается подняться выше, чем состояние Смерть.

Этот оператор switch использует переменную current state для циклического перебора различных состояний enum Enemy. Вместо того, чтобы вставлять сюда фактическое поведение врага, я просто отправляю отладочное сообщение на консоль для этого конкретного состояния.

К каждому из этих вражеских объектов прикреплен скрипт Enemy Behavior.

Это позволяет им индивидуально использовать переменную Текущее состояние для выбора собственного поведения. Этот враг Патрулирует.

Этот враг следит.

Этот враг Атакует.

Здесь вы можете видеть, что у каждого врага есть все доступные поведения.

Если я играю в игру, каждый враг отправляет на консоль собственное отладочное сообщение. Обычно это движение с частотой 60 кадров в секунду.

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

При нажатии клавиши пробела переменная текущего состояния будет увеличиваться, перемещая ее вперед в следующее состояние в списке. Как только текущее состояние проходит мимо смерти, оно сбрасывается на патрулирование.

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

Использование логики и условий в ваших операторах switch идеально подходит для определения того, когда вы хотите, чтобы поведение противника изменилось. Как видно здесь, как только здоровье этого врага становится ниже 20, состояние Уклонение запускает любой сценарий, который вы подключаете здесь. Что мне действительно нужно сделать, так это проверить работоспособность в предыдущем состоянии, а затем установить состояние на обход этого состояния. Здесь, в уклонении, я бы проверил условие для выхода из маневров уклонения и установил другое состояние.

Состояние смерти врага — хорошее место для уничтожения вражеского игрового объекта!

Пользовательские классы

Давайте добавим enum в этот пользовательский класс Item. Перечисление ItemType представляет различные типы элементов, на которые может претендовать каждый элемент. Здесь у меня есть оружие, расходные материалы, броня и валюта для вариантов.

Использование метода с оператором switch дает пользователю возможность вернуть некоторую информацию о вызываемом типе элемента, когда другой скрипт хочет ссылка на него.

Давайте перейдем к скрипту ItemDatabase, который прикреплен к пустому объекту в сцене. Последняя строка создает новый список из элементов с именем itemsList, а затем инициализирует его.

Каждый метод ItemAction можно вызывать через список itemsList List, а затем объявлять, над каким элементом нужно выполнить действие.

Вызывается действие для каждого элемента, и соответствующий ему тип элемента выводится на консоль. Это может быть полезно, если у вас есть множество расходных материалов, которые ведут себя одинаково при потреблении.

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

Спасибо за прочтение!