Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы и ответы к экзамену.docx
Скачиваний:
29
Добавлен:
21.06.2022
Размер:
16.83 Mб
Скачать

3.3.3. Слежение за состоянием персонажа

Текущее поведение врага имеет один недостаток. Движение вперед продолжается даже после попадания в него пули. Ведь метод Translate() запускается в каждом кадре вне зависимости от обстоятельств. Внесем в код небольшие изменения, позволяющие следить за тем, жив персонаж или мертв. Говоря техническим языком, мы хотим отслеживать «живое» состояние персонажа. Код, по-разному реагирующий на разные состояния, представляет собой паттерн, распространенный во многих областях программирования, а не только в AI. Более сложные реализации этого паттерна называются конечными автоматами.

Разумеется, речь о настоящей реализации конечного автомата не идет, но нет ничего странного в том, что при обсуждении искусственного интеллекта упоминаются основы FSM. Конечный автомат обладает множеством состояний для различных вариантов поведения сложного искусственного интеллекта, в случае же базового искусственного интеллекта достаточно отследить, жив персонаж или уже нет. В следующем листинге в начальную часть сценария добавляется логическая переменная _alive, значение которой будет периодически проверяться в коде. Благодаря этим проверкам код движения запускается только для живого персонажа.

14. Увеличение количества врагов: шаблон экземпляров, создание шаблона врага, сценарий SceneController, порождающий экземпляры врагов.

3.4.1. Что такое шаблон экземпляров?

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

Термин экземпляр (instance) относится также к создаваемым на основе класса объектам кода. Попытайтесь не запутаться в терминологии; словосочетание «шаблон экземпляра» относится к игровому объекту, существующему вне сцены, в то время как экземпляром называется помещенная в сцену копия объекта.

3.4.2. Создание шаблона врага

Конструирование шаблона начинается с создания объекта. Так как мы планируем получить шаблон из объекта-врага, этот шаг уже сделан. Теперь нужно перетащить строку с названием этого объекта с вкладки Hierarchy на вкладку Project, как показано на рис. 3.7. Объект автоматически сохранится в качестве шаблона. На панели Hierarchy его имя будет выделено синим цветом, означающим, что теперь он связан с шабло­ном экземпляров. Редактирование этого шаблона (например, добавление компонентов) осуществляется посредством редактирования объекта сцены, после чего в меню GameObject выбирается команда Apply Changes To Prefab. Но сейчас данный объект в сцене уже не нужен (мы собираемся порождать новые шаблоны, а не пользоваться уже имеющимся экземпляром), поэтому его следует удалить.

Рис. 3.7. Процесс получения шаблона экземпляров

ВНИМАНИЕ Интерфейс для работы с шаблонами экземпляров не слишком удобен, а соотношения между шаблонами и их экземплярами в сценах порой достаточно нестабильны. К примеру, зачастую требуется перетащить шаблон в сцену для последующего редактирования, а после завершения этого процесса удалить объект. В первой главе я упоминал об этом как о недостатке Unity и надеюсь, что в следующих версиях последовательность действий будет усовершенствована.

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

Присоедините этот сценарий к объекту-контроллеру, и на панели Inspector появится поле для шаблона врага с именем Enemy Prefab. Оно работает аналогично общедоступным переменным, но есть и важное отличие.

15. Стрельба противника путем создания экземпляров: шаблон снаряда, материал, столкновение с целью, повреждение. Сценарий AI с возможностью кидать огненные шары. Сценарий огненного шара, реагирующий на столкновения. Сценарий повреждений игрока.