Max Payne: Часть 5. Cкриптинг FSM

Скрипты в MaxEd 2
Во первых "все гениальное просто" - управление игроком за кадром, наступаем на триггеры, происходит действие (конкретно управление направлением - "влево", "право", "вперед", "назад" и "прыжок" (те самые 5 клавиш). Рассматривалось 6 действие - "использовать", но увы влечет за собой кучу багов и поэтому пришлось от него отказаться. Далее перечислены по пунктам фиксы необходимые для скрипта.
1. Настройка скина персонажа:
Движок имеет в наличии оптимизацию в которую входит скрытие моделей не находящихся в обзоре так же и игрока, что не позволяет им управлять исправляется внесением изменений в скиновку игрока, внесем следующие изменения в строки в графе [LOD]
EnableBoundingSphere = FALSE;
BoundingSphereRadius = 10000.90;
EnableBoundingBox = FALSE;
Теперь модель не будет скрываться при отдаленной камере и будет иметь возможность управления вне зависимости от камеры.
2. Убираем видимость управления игрока за сценой:
Используем команды в начале скрипта:
MaxPayne_GameMode->GM_StorePlayerInventory(1);
player->C_RemoveAllWeapons(Empty);
И соответственно на выходе:
MaxPayne_GameMode->GM_RestorePlayerInventory(1);
Теперь игрок во время действия скрипта будет безоружным и не сможет стрелять. Так же желательно отдалить его подальше от сцены но не за портал чтобы не было слышно шагов и прыжков.
3. Сам принцип работы скрипта:
Игрок находится на вэйпойнте среди 5 тригеров (4 вокруг и 1 над головой фиксирован постоянным направлением вперед и с возможностью двигаться с периодом в 0.3 секунды для совершения действия).
4. Рассмотрим основные моменты:
Цель - заставить двигаться кубик в заданном направлении игроком (это 5 наших направлений). Aктивируем скрипт и лишаем оружия игрока. Стабилизируем игрока в скрипте таймером в 0.3 секунды - создаем циклический таймер с FSM_switch. Для его дальнейшего отключения циклируем телепорт на вэйпойнт в центр скрипта тем самым и позволяем игроку управлять лишь 0.3 секунды для совершения направления или прыжка. Атачим камеру на кубик и анимируем его 5-ю направлениями, присваивая соответственно анимации триггерам окружающим игрока. Как надоедает двигать кубик, делаем выход - меняем FSM_switch циклического таймера на Off и возвращаем оружие, делаем сброс камеры.
Сложный, но реализуемый пример на Сontrol Script:
Любой FSM элемент можно активировать с помощью движения игрока, делается это следующим образом:
В файле где описано управление игроком найти нужное движение и дописать к нему строку в анимации.
[Message] Frame = 0; String = "this->FSM_Send(xxxx);";
Где "xxxx" название FSM в категории Player в редакторе Maxed'a (другими словами на карте уровне и т.д.) Таким образом можно создать тучу рандомных sub-анимаций.

Просмотров: 3 234

Комментарии пока отсутcтвуют