Лифтовой мувер (ElevatorMover)
______________________________
ElevatorMover, наверное, является самым продвинутым мувером, т.к. он
предоставляет Вам возможность контролировать каждый кадр-ключ. Пример: если у
Вас мувер с четырьмя кадрами-ключами, Вы можете поставить 4 лифтовых датчика
(ElevatorTriggers) на уровне - один для Key0(base), второй для Key1, третий для
Key2 и четвертый для Key3.
Чтобы добавить мувер этого класса просто нажмите правой кнопкой мыши на иконке
AddMover и в списке выберете ElevatorMover. Организуйте для него 4 кадра-ключа.
Откроем свойства мувера (ElevatorMover) и в разделе Objects установим
InitialState в положение ElevatorTriggerGradual. Затем в пункте Events дадим
муверу имя (Tag), например, ElevatorMover.
Лифтовые муверы не работают с нормальными датчиками. Вам необходимо будет
использовать специальный вид датчиков - лифтовые датчики (ElevatorTriggers).
Ясное дело, что у таких датчиков есть свои, присущие только им, настройки.
Кстати, ElevatorTrigger находятся в Браузере Актеров (Actor Class Browser) в
разделе Triggers.
Добавьте 4 таких датчика (каждый для соответствующего кадра-ключа), и перейдите
в их настройки. В разделе Events в поле Event введем ElevatorMover. Теперь Вы
увидите красные линии, проведенные из датчиков к муверу.
Затем, выберете один из лифтовых датчиков (ElevatorTriggers), откройте окно
свойств, пункт ElevatorTrigger.
Здесь находятся следующие настройки:
bTriggerOnceOnly - датчик одноразовый (после одной активации больше работать
не будет);
ClassProximityType - используйте в совокупности с TT_ClassProximity. Более
подробно смотрите в главе Муверы с датчиком (Triggered Movers);
GotoKeyFrame - это и есть то уникальное свойство присущее только лифтовым
датчикам: при активации подобного датчика, он не только активирует мувер, но
и указывает ему к какому кадру-ключу ему нужно двигаться, тем самым,
указывая, что он контролирует этот кадр-ключ;
MoveTime - если больше чем 0, указывает скорость Лифтового Мувера
(ElevatorMover), но, судя по всему, эта фишка пока не работает;
TriggerType - указывает, кто или что может быть причиной активации датчика.
Более подробно описано в главе Муверы с датчиком (Triggered Movers);
Установим свойство GotoKeyFrame для каждого датчика соответственно равным 0, 1,
2 и 3.
Если теперь запустить карту, и Вы активируете один из датчиков, мувер
переместиться в положение кадра-ключа, номер которого Вы указали в опции
GotoKeyFrame данного датчика. е имеет значения, с какого кадра-ключа мувер
начал движение - он всегда переместиться в нужное положение!
Этот тип мувера называется Лифтовой мувер, но, тем не менее, его можно
использовать для других вещей. Для всего, что требует фиксации в разных
кадрах-ключах, может быть использован этот класс муверов. Яркий пример этому -
поезд, перемещающийся между различными станциями. Также, если Вы задумаете
использовать мувер с двумя кадрами-ключами, но с отдельными датчиками для
каждого положения - воспользуйтесь Лифтовым Мувером.
Что касается звуков: для Лифтовых Муверов (ElevatorMover) никогда не
используйте зацикленные звуки - они останутся звучать вечно.
И еще одна вещь, вернее баг: если мувер был заблокирован при движении, он
остановиться и не будет слушаться кнопок (датчиков). Единственный выход -
установить опцию MoverEncroachType в положение ME_IgnoreWhenEncroac
_______________________________________________________________________________
_______________________________________________________________________________
AssertMover
___________
Этот тип муверов будет находиться в открытом состоянии до тех пор пока Вы
находитесь в радиусе действия датчика. Когда Вы покинете пределы досягаемости
датчика мувер остановиться и "подождет" в ближайшем кадре-ключе на своем пути,
а затем закроется. Это означает, чем дольше Вы находитесь в радиусе действия
датчика, тем больше мувер откроется. у, естественно, если у него есть больше
двух кадров-ключей.
Сделать этот мувер просто: на кнопке Add Mover нажмите правый батон мыши и в
списке выберете AssertMover. сделайте для него более 2 кадров-ключей, например
4. В его свойствах укажем InitialState равный AssertTriggerOpenTimed. И дадим
ему имя (Tag) - например AssertMover. Затем добавим датчик с таким же именем в
поле Event.
Откроем окно свойств мувера (AssertMover Properties), и воспользуемся
настройками в разделе AssertMover.
bOnceOnlyStopOpen - если установлено в положение true, то мувер останется
навсегда открытым по достижении последнего кадра-ключа;
CloseTimes - в отличии от нормальных муверов, которым можно задать время
закрытия между соседними кадрами-ключами (и это время будет относиться ко
всем кадрам-ключам), для этого класса муверов есть возможность указания
времени закрытия для каждого промежутка между кадрами-ключами. CloseTime[0] -
время движения (при закрытии) из Key1 в Key0(base), CloseTime[1] - время
движения (при закрытии) из Key2 в Key1 и т.д. не забывайте использовать эти
настройки вместо свойства MoveTime. Если оставить эту опцию равную 0, то Ваш
мувер будет двигаться еРеально быстро;
OpenTimes - OpenTime[0] - время необходимое муверу для движения при открытии
из Key0(base) в Key1, OpenTime[1] - из Key1 в Key2 и т.д.
еудобно, что CloseTimes и OpenTimes работает только в случае если
InitialState мувера установлено в AssertTriggerOpenTimed. Если Вы используете
другой InitialState, то для указания времени мувер использует MoveTime. Если
Вы все же хотите управлять временем перемещения мувера для каждого
кадра-ключа, но не используете AssertTriggerOpenTimed, Вы можете симитировать
его, привязав датчик к муверу (см. главу Связанные муверы (AttachMovers));
WaitUnAssertTime - это время задержки перед началом закрытия, в случае если
Вы покинули радиус действия датчика;
_______________________________________________________________________________
_______________________________________________________________________________
GradualMover
____________
Этот тип муверов по достижении каждого из своих кадров-ключей меняет свое имя
(Tag). Поэтому в положении, соответствующем кадру-ключу 0 (Key0), мувер будет
"слушаться" одного датчика, в другом положении (например, в Key1) - уже
другого. Также у Вас есть возможность указать разные события для каждого
кадра-ключа мувера. Добавим такой мувер и зайдем в его свойства (GradualMover
Properties).
CloseTimes - то же самое что и CloseTimes для AssertMover;
Events - событие, вызываемое мувером для каждого из первых 6 кадров-ключей.
Вы можете использовать это, например, для открытия дверей на разных этажах, в
зависимости от того, на каком находится GradualMover;
OpenTimes - то же самое что и OpenTimes для AssertMover;
Tags - имя для каждого кадра-ключа мувера (возможно указание только для
первых 6 кадров-ключей). Если для Tag[0] введено А, а для Tag[1] - В, то в
положении Key0(base), мувер придет в движение только при возбуждении события
А,и никак не отреагирует при возникновении события В. Если же мувер находится
в Key1, то он активируется событием В. Событие А на него, в данном случае,
никак не подействует;
Зайдя в пункт InitialState в разделе Object свойств мувера, Вы заметите 3 новых
значения для InitialState:
GradualTriggerToggle - при активации датчика соответствующего Tag[0], мувер
сместится в последний кадр-ключ и останется в этом положении до следующей
активации именно тем же датчиком, что вызовет возврат в исходное положение.
Мувер не будет останавливаться в промежуточных кадрах-ключах, и Вы не можете
использовать различные имена (Tags) - в данном случае работать будет только
Tag[0]. Тем не менее, различные события для каждого положения все же будут
иметь силу;
GradualTriggerPound - очень непонятный мувер. При тестировании он действовал
так: при попадании игрока в радиус действия датчика первый раз, мувер
открылся и затем закрылся. Когда игрок покинул радиус действия - мувер
проделал то же самое, т.е. открылся и затем закрылся. о после этого он вдруг
начал действовать как GradualTriggerOpenTimed мувер, описанный ниже.
Упоминаемый здесь датчик соответствует Trigger0 в примере ниже;
GradualTriggerOpenTimed - это единственное значение InitialState, при котором
мувер реально использует различные имена (Tags). Если мувер закрыт и при этом
Tag[0] равен А, Tag[1] равен В, Tag[2] равен С, а соответствующие датчики
имеют те же самые события (Events), то Датчик0 (Trigger0) переместит мувер в
Key1. В этом положении он останется ждать активации Датчика1 (Trigger1).
Затем мувер сдвинется в Key2. В этом примере это последний кадр-ключ, поэтому
здесь мувер задержится на время, указанное в StayOpenTime, и вернется затем в
Key0(base). Если Вы используете 6 кадров-ключей, у Вас будет мувер, который
достигнет своего последнего кадра-ключа в случае предварительной активации 5
датчиков в определенной последовательности (для последнего кадра-ключа датчик
не понадобится). Плюс ко всему, Вы можете указать для каждого положения
различные события (Event) мувера для активации чего-нибудь еще;
_______________________________________________________________________________
_______________________________________________________________________________
Группа возврата (ReturnGroup)
_____________________________
Группа возврата (ReturnGroup) - неизвестная большинству мапперов, но играющая
очень важную роль для муверов, настройка. Используется для разбиения муверов с
одинаковыми именами (Tags) на подгруппы.
Если у мувера при движении возникло препятствие, то в зависимости от настроек,
мувер либо остановиться, либо вернется, либо проигнорирует препятствие, либо
просто-напросто раздавит препятствие (игрока) - в данном случае не имеет
значение какое поведение выбрано (см. настройку MoverEncroachType). Итак,
допустим, у Вас имеется несколько муверов с одинаковыми именами (Tags), и один
из них был каким то образом заблокирован при движении. В этом случае все муверы
соответствующей группы либо остановятся, либо вернуться, либо.... Во избежании
подобного поведения единственный выход распределить каждый мувер в отдельную
группу возврата (ReturnGroup). Теперь все муверы одной группы (т.е. с
одинаковыми Tags, активирующиеся одним общим датчиком, и.т.д) не будут при
блокировке одного из них реагировать на поведение своего "брата".
Предупреждение: когда Вы добавляете мувер, вне зависимости от их количества,
имя устанавливаемое по умолчанию будет Mover. Это означает, что все муверы
будут иметь один и тот же Tag (ну если Вы, конечно, не поменяли имя вручную), и
соответственно будут членами одной группы. Поэтому, если Вы очень удивлялись
странному поведению, скажем, дверей при блокировке лифта на одном уровне,
причина кроется именно в группе возврата.
екоторые классы муверов, такие как GradualMover будут также останавливаться и
возвращаться вместе, даже если у них разные имена (Tags). В данном случае Вам
просто необходимо будет распределить их по разным группам возврата. Если Вы, к
примеру, соорудили головоломку, используя GradualMover, то ее работа может не
соответствовать задуманному Вами сценарию, из-за неадекватного поведения
муверов. Здесь также выручит использование различных ReturnGroup для каждого
мувера.
При наличии нормальных муверов с различными именами (Tags), но имеющих
одинаковую группу возврата, они также будут останавливаться и возвращаться
вместе.
_______________________________________________________________________________
_______________________________________________________________________________
Еще некоторые свойства муверов
______________________________
иже перечислены все свойства муверов, которые не рассматривались ни в одной из
вышеприведенных глав:
bDamageTriggered - мувер активируется при нанесении ему повреждения,
количество которого устанавливается в поле DamageThreshold. Работает только
при InitialState установленном TriggerOpenTimed или TriggerToggle. Чтобы
узнать урон, наносимый оружием в Unreal Tournament, а также узнать больше об
InitialState, веринесь к главе Муверы с датчиком (Triggered Movers);
bSlave - делает текущий мувер "рабом" другого мувера. Еще один способ
привязки муверов друг к другу. Эффект при этом тот же что и при использовании
AttachTag мувера;
bUseTriggered - скорее всего эта фишка была задумана для активации мувера
путем нажатия кнопки на клавиатуре, как это сделано, например, в Half-Life.
о в финальной версии Unreal, от ее реализации отказались;
DamageThreshold - укажите здесь количество повреждения, необходимое для
активации мувера (имеет смысл только при bDamageTriggered равном true);
Страница 123456 <<< Предыдущая Следущая >>>Содержание