Главная > Игры > 3D Action >
Unreal Movers Tutorial [5/6]
Лифтовой мувер (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);


Страница 1 2 3 4 5 6 <<< Предыдущая Следущая >>> Содержание


Украинская Баннерная Сеть

Главная  Алфавитный индекс  Справка  Добавить FAQ  E-mail
Новости  Поиск по сайту

Copyright © 2001 - 2003 Olexandr Slobodyan.
Сайт создан в системе uCoz