IdleMarker — что это такое, как создать новый и сделать модель поведения NPC в разное время суток.
Для работы ИИ (Искусственного интеллекта) в игре используется NavMesh. После создания навмешей для NPC требуются AI пакеты, которые сделают его «живым» (Вкладка AI Packages в меню Actor). Каждому NPC лучше прописывать определенный набор Default пакетов, наиболее важным из которых будет является Sandbox пакет (DefaultSandboxLocEditor1024 – например).
Приписав персонажу пакет, вы увидите, как тот бродит с места на место, пьет и закусывает. Для того, чтобы как-то разнообразить жизнь актера, используется фурнитура (WorldObjects/Furniture/...) и набор маркеров, таких как IdleMarkers.
Для начала разберемся, что за зверь такой этот IdleMarker. В словоблудии уже говорилось, что эти маркеры позволяют разнообразить поведение NPC в какой-либо локации. Более того, они позволяют, не прибегая к скриптам и сценам создавать модель поведения NPC в разное время суток, но это уже зависит от AI-пакетов.
Именно благодаря IdleМаркерам стражники патрулируют улицы городов, а Драконий Предел ежедневно очищается от пыли и мусора двумя безустанными служанками. Сами по себе IdleМаркеры наследуют анимации, заложенные для каждого NPC. К сожалению, не все анимации пригодны для использования в маркерах, но самое главное не это, а то, что десятки анимаций так и небыли использованы разработчиками игры. Теперь, когда дело сказано, можно приступить к поэтапному разбору и созданию IdleMarker'a.
Создание IdleMarker'a на основе доступных анимаций
Откроем ObjectWindow > раздел Miscellaneous > IdleMarker. Здесь мы видим список из уже доступных маркеров:
Жмем правой кнопкой мыши по этому пространству и создаем новый IdleMarker. Перед нами появляется окно IdleMarker:
Тут стоит остановиться на каждом из параметров окна:
- Поле Marker Model – его трогать не стоит. Модель маркера уже заложена и будет использоваться в окне рендера;
- Child Can Use – могут ли дети использовать маркер;
- Ignored By Sandbox – будет ли маркер игнорироваться актерами (применимо в ситуациях, когда маркер выполняет специальную анимацию для какой-либо сцены в каком-либо квесте;
- Do Once – маркер будет использован один раз;
- Поле Idle Timer Setting – настройка времени выполнения данного маркера. Не все маркеры могут быть настраиваемы этим параметром;
- Пункты Random и Run In Sequence отвечают за случайное или последовательное выполнение IdleАнимаций в случаях, когда ваш маркер содержит сразу несколько анимаций;
- Этими стрелочками можно регулировать порядок распределения маркеров в списке, соответственно изменять последовательность их выполнения (не забываем про пункт 6).
Разобравшись со свойствами окна, переходим к добавлению новой анимации в наш маркер. Нажимаем на пустое поле правой кнопкой мыши и выбираем New. Перед нам окно Select Idle. Мы видим список всех IdleАнимаций, доступных для использования в IdleМаркерах, кроме того есть поле выбора актера и окно просмотра:
Выберем себе актера, для которого нам нужно получить список анимаций. Обратите внимание, при смене актеров меняется и список. Вы можете упорядочить список по имени или ID. По умолчанию список упорядочен по дате:
Я выбрал Ульфрика Буревестника и получил список доступных анимаций. Обязательно учтите следующее:
- Список анимаций идентичен для всех играбельных рас, в том числе детей. Для всех пауков, к примеру, будет одинаковый список состоящий из нуля доступных анимаций.
- В данном списке содержатся где-то 250-300 анимаций. В IdleМаркерах применимы лишь 150. Как правило все они начинаются со слова Idle.
- Многие анимации не будут проигрываться актерами. К этому нужно привыкнуть и смириться. Вероятно, это есть баг самой системы IdleМаркеров.
- Все анимации добиваний (около 80) можно найти в этом списке. К сожалению при их исполнении актеры не используют оружие из инвентаря. Они просто машут руками.
- Не возвращайте окно выбора Актера в позицию NONE – это приводит к вылету редактора.
- Вероятно, в превью-окне должен был работать рендер самой анимации, дабы вы не включали по 100 раз игру для тестирования. Увы, что сломано, то сломано.
- Некоторые анимации имеют начало, зацикленную часть выполнения и конец. Используйте либо начальную, либо срединную фазу (в названии анимации слова Start\Enter и Instant).
- Некоторые анимации наследуют объекты, такие как кинжалы, бутылки, чашки, метла. Добавлять их в инвентарь самому персонажу не нужно. Однако, например анимация чистки меча наследует оружие из инвентаря актера.
Для примера я выбрал анимацию IdleAstrid (Финальная миссия за Темное Братство, обгоревшее тело Астрид «распято» на полу). Далее жмем OK. И выбираем место для своего маркера:
По быстрому я собрал прототипную ячейку, не забыл про сетку путей, Ульфрика и сам маркер:
В результате Ульфрик подходит к маркеру и растягивается на полу:
Не находите это немного скучным и не обыгранным? Так давайте изменим окружение под этот маркер:
И вот сцена преобразилась, она уже может поведать какую-то историю. Ульфрик Буревестник стал жертвой имперского произвола, либо у Авентуса Аретино появились новые заказы для Темного Братства. Первый этап пройден.
Расширение списка доступных IdleАнимаций для использования их в системе IdleMarker
А что если нам мало стандартных анимаций? А есть ли другие анимации? Давайте разбираться. На верхней панели найдите Gameplay, далее Animations:
Перед нами окно Idle Animations. Здесь мы видим каталоги с анимациями для разных типов существ, в том числе для фурнитуры и активаторов:
Запомним это место. Теперь нам необходимо выбрать анимацию, которую мы хотим использовать в качестве IdleМаркера. Для этого откроем в окне Object Window наших NPC. (Actors > Actor):
Находим своего актера, открываем, переходим на вкладку Animation (список анимаций также доступен через Preview Window):
Тут работает рендер анимаций. Все, что нам нужно - это выбрать себе анимацию по вкусу. Естественно лучше искать среди анимаций, начинающихся со слова Idle. Изначально я выбрал анимацию шатающейся пьяной походки (А такая есть и нигде не используется, сюрприз да?), но она не сработала на IdleМаркере. Поэтому возьмем анимацию написания письма пером в сидячем положении (Два сюрприза за день – да вы везунчик!):
Теперь запомним ее название. В моем случае это IdleWriteTableChairIdle.hkx. Название нужного нам AnimEvent’a будет примерно таким же. Возвращаемся к окну Idle Animations. Итак, нам нужен набор анимаций для «разумных рас». Это каталог Actors\Character\Behaviors\0_Master.hkx:
Тут мы видим много подкаталогов с различными действиями для игрока. Ничего не трогаем, листаем вниз до папки LOOSE:
Открыв эту папку, мы видим до боли знакомую картину – тот самый список анимаций, доступных при создании IdleМаркера (разве что сортировка алфавитная). Жмем куда-нибудь в это место правой кнопкой мыши > Insert Child. Получаем новую анимацию, без имени. (отображение вверху списка), придумываем ей ID:
В самом окне имеются дополнительные параметры:
- Sequence, Blocking, No attacking не трогаем. Они не используются в данном разделе.
- Looping Seconds используется для задания цикличности выполнения действия.
- Replay Delay – задержка перед повторным выполнением анимации.
- Conditions – пропишите условия для выполнения анимации. Тут вы ограничены только свей фантазией. Можно поставить зависимость от чего угодно (погода, пол, раса, уровень и еще десятки условий – все зависит от вас).
- AnimEvent – само окно для выбора анимационного события:
Начинаем искать нашу анимацию. Мы видим действие IdleWriteTableChairEnterInstant. То, что нужно. Кстати, там еще есть анимации для разных типов кресел: будь то с левосторонним «входом» или правосторонним. Нам же не принципиально. Заметьте, название AnimEvent'a и Havok Анимации не совпадает, но очень похоже:
Выбираем нужную анимацию, нажимаем Close. Открываем свой IdleMarker. Нажимаем New. Получаем список доступных анимаций. Находим там свою IdleАнимацию:
Дважды кликаем по ней, сохраняем маркер и если он у вас уже где-то размещен – смотрим результат в игре:
И вот вроде бы все хорошо. У Ульфрика появилось письмо, он старательно выводит на нем пустоту что пишет. Но. Где стул? А где плавная анимация посадки на этот стул? Непорядок. Давайте разбираться:
Как видите, иногда приходится «помогать» IdleАнимациям нормально выглядеть. Можно было бы подставить какую-нибудь табуретку или камень для Ульфрика, но это не профессиональный подход.
Итак, нам нужно заставить Ульфрика проиграть IdleАнимацию тогда, когда он сядет за стул. Определенный стул, а не кровать или скамейку:
Для этого нам нужен сам Ульфрик. Открываем его как Reference самой локации, переходим на вкладку Scripts и создаем новый скрипт (Add > New > «Вводим название» > OK). Затем правой кнопкой по нему > Edit Source:
Открывается текстовое окно, там мы видим только: Scriptname (Имя вашего скрипта) extends ObjectReference
Сменяем ObjectReference на Actor и полный скрипт выглядит так:
Scriptname (Имя вашего скрипта) extends Actor Idle property AnimIdle auto ObjectReference property Chair auto Event OnSit(ObjectReference akFurniture) If akFurniture == Chair PlayIdle(AnimIdle) EndIf EndEvent
В данном случае, как только Ульфрик использует фурнитуру (OnSit), при условии, что наша фурнитура - нами выбранное кресло (Chair), проигрывается наша IdleАнимация (AnimIdle). Нажимаем File > Save. Скрипт скомпилирован. Остается дать скрипту знать, какую фурнитуру ему нужно учитывать, и какую анимацию проигрывать:
Дважды кликаем левой кнопкой мыши по имени скрипта / правой кнопкой мыши по названию > Edit Properties. Выбираем наше AnimIdle. В окне Pick Object мы видим тот самый список анимаций, доступных только для IdleМаркеров, в который мы занесли новую. Затем в Chair выбираем наше кресло.
Проверим в игре:
Ульфрик садится в кресло, достает пергамент и начинает писать. Великолепно! Сцена обыграна логично (Стол выберете сами).
Гениальность системы искусственного интеллекта Скайрима в том, что он не станет заставлять NPC 100% выполнять вашу анимацию, если его не попросить. Как видите пока один Ульфрик пишет, второй закусывает, а третий запивает:
Минутка словоблудия
В Скайриме зашито множество анимаций, пригодных для использования IdleМаркерами. Почему разработчики их не использовали? Мы не знаем, но ничто не мешает вам использовать эти анимации не только для скриптовых сцен, но и для обычных ситуаций и локаций так, чтобы они стали необычными.
Вот небольшой список (далеко не полный) Havok Анимаций (просмотр во вкладке Actor), которые не найти в повседневном Скайриме, либо их использовали единожды (Даю начало названия, каждая анимация имеет два-три варианта или стадий исполнения):
- AOBarTableMug...hkx - пьяные песни и размахивание кружкой сидя за столом.
- AOBarTablePassOut...hkx - уснул, лицо на стол (или в тарелку).
- AOBarTableSaluteLoop...hkx - тост за любовь, за детей, за удачу, за Скайрим!
- Chair_SoupIdle...hkx - использовалось по квесту с Гурманом. Когда двойник императора ел суп и давился им.
- CraftingEnchantingBenchCast.hkx - персонажа начинает круговые взмахи руками на пентаграммой, затем резко их опускает, в общем именно так планировалось накладывать заклинания.
- CraftingEnchantingBenchDrop.hkx - персонаж кладет на стол зачарования вещь\камень душ.
- CraftingEnchantingBenchIdleCircle.hkx - персонаж очерчивает пентаграмму пальцем.
- IdleBlessingKneel...hkx - персонаж преклоняет колено и одной рукой касается земли (можно обыграть поиск следов на земле)
- IdleDrunk...hkx - пьяные шатающиеся повороты в стороны или вышеупомянутая походка.
Комментарии