By Deerkey: Падающий лифт
Внимание. статья является изменёной и дополненой для конкретного случая статьей с сайта XGM.RU Для начала создадим сам лифт и три стены к примеру.(Чтобы было чему рарваливаться).
Далее групируем стены в лифт, для этого в режиме Ф5 Выделяем эти три стены, жмём G и кликаем мышкой по нижней платформе лифта. Готово, теперь все стенки лифта принадлежат её «полу». Теерь нам неоходимо сделать так чтобы они могли вигаться в пространстве. Выделяем «пол» нашего лифта и жмём D (аналогично СКМ -> Make Selection Dynamic). На оба вопроса отвечайте утвердительно. Лифт превратился в динамический объект. Теперь предстоит задать ему анимацию, чтобы он поднимался вверх и опускался вниз соответсвенно. Выделите «пол» лифта и нажмите Tab (или СКМ -> Dynamics and FSM -> Keyframe Dialog). Анимация динамических объектов выполняется по ключевым кадрам. Keyframe_0 – это именно он. Можно указать, какой кадр будет при загрузке уровня (make default) и в каком состоянии просчитывать освещение (make lighting).
Итак, у лифта будет два ключевых кадра – «Лифт сверху» и «Лифт снизу». Нажмите на Add и добавьте еще один кадр. Выделите новый кадр и закройте это окно. Активным является второй кадр. Но мы не видим никаких изменений, т.к. по умолчанию он совпадает с предыдущим (то есть с активным в момент создания второго). Нажмите N (СКМ -> Animate toggle); вокруг экрана появится красная рамка, показывающая, что производится редактирование текущих ключевых кадров. Выделите «пол»(Выделится весь лифт), поднимите лифт вверх и выключите режим анимации (снова N). Теперь при выделении в предыдущем диалоге ключевых кадров положение лифта будет меняться.
Нажмите Shift+Tab (СКМ -> Dynamic and FSM -> Animation Dialog). Это список анимации для выбранного объекта. Добавьте новую анимацию и укажите ключевые кадры(первый - Keyframe_0, послледний - Keyframe_1). Назовём нашу анимацию UP. Создайте ещё одну анимацию на этот раз поменяв местами ключевые кадры и назовите её DOWN.
Кнопка Keyframes позволяет поменять ключевые кадры, Length – длительность анимации в секундах. В Position и Rotation Graph можно установить неравномерное движение и поворот объекта. Обращаю Ваше внимание на то, что поворот в течение анимации осуществляется относительно Pivot Point. Иногда это существенно влияет на вид движения. Двойной щелчок по анимации продемонстрирует ее в редакторе.
Теперь нужно сделать кнопки, которые будут поднимать и опускать наш лифт. Создайте пару мешей(один на метр выше от пола, второй на метр выше от «пола» лифта. Поверх каждой кнопки поставьте триггер(назовём tUP и tDOWN соответственно). Сделать это можно в F3 -> N (СКМ -> New Entity) и выбрать тип trigger (это будет сферический триггер), либо превратить в триггер любой готовый Mesh: F5, Ctrl+D (СКМ –> Make Selection Trigger). Триггеры бывают нескольких типов – в зависимости от способа активации (понятного по названию(Нам нужен Use)). Пояснения требует разве что LookAt – взгляд игрока направлен в Pivot Point триггера. Можно указать вид анимации; если Макс выламывает дверь, логично поставить use_kick_door вместо default.
Теперь настал черед непосредственно самих скриптов. Выделите нижний тригер и нажмите B (СКМ -> Edit FSM). В блок Trigger -> T_Activate пишете
::StartRoom::lift->DO_Animate(Up);
#поднятие лифта вверх, вместо StartRoom пишете название комнаты, в которой находится лифт.
this->T_Enable(0);
#Отключение триггера - это нужно во избежание глюков, чтобы случайно не активировать триггер пока лифт поднимается.
Теперь, если нам не нужно чтобы лифт разрушался на части, то в верхнем тригере в том же разделе пишем:
::StartRoom::lift->DO_Animate(Down);
#опускание лифта лифта вниз
this->T_Enable(0);
#Отключение триггера - это нужно во избежание глюков, чтобы случайно не активировать триггер пока лифт поднимается.
::StartRoom:: tUP->T_Enable(1);
#Включаем нижний триггер, чтоб при необходимости вновь поднятся.
Следовательно в нижний триггер надо добавить
::StartRoom:: tDOWN->T_Enable(1);
Всё, теперь лифт работает. Но нам это сейчас ненужно, нам нужно чтобы он разрушился и полетел вниз. Для этого удаляем анимацию DOWN, всё из верхнего триггера и пишем туда:
::StartRoom::lift::W1->DO_EnablePhysics(1);
::StartRoom::lift::W2->DO_EnablePhysics(1);
::StartRoom::lift::W3->DO_EnablePhysics(1);
::StartRoom::lift->DO_EnablePhysics(1);
# W1, W2, W3 – стены лифта, которые я переименовал для удобства работы с ними в самом начале работы
Так мы включаем физику обьектам, а по законам физики как вы знаете тело падает вниз если на другие силы не превосходят по модулю силу притяжения.