Главная > Игры > 3D Action >
Unreal Movers Tutorial [3/6]
Часть II
_______________________________________________________________________________
_______________________________________________________________________________

Вещи, которые неплохо бы знать
______________________________

Многие люди интересуются подобными вещами но никогда не пробовали в действии:
Муверы могут проходить сквозь стену. При этом игрок, стоящий на мувере сквозь
стену, естественно, не пролезет. Муверы также отлично работают, если исходное
положение у них в стене, или вообще вне пределов Вашей карты, где-то в
клетчатой темноте. Там мувер вполне хорошо себя чувствует и двигается, и при
этом Вы его не видите. Это очень часто используется для привязки объектов к
"невидимому" муверу;

Муверы работают под водой. Однако здесь нужно иметь в виду, что если игрок
стоит на мувере, а он свою очередь двигается вниз, игрок останется барахтаться
на месте (что в принципе логично). В данном случае выходом является постройка
мувера со стенами и потолком;

Когда Вы сохраняете Вашу карту без предварительной перестройки (rebuild), а
затем откроете его позже, все муверы пропадают. Во всяком случае, такое имело
место несколько раз;
_______________________________________________________________________________
_______________________________________________________________________________

Вращающиеся муверы
__________________

 ет никакой необходимости специального класса для вращающихся муверов. Можно
заставить вращаться любой объект, декорацию, оружие, мувер и т.д., всего лишь
задав соответствующую настройку.

Создайте мувер. Сейчас Вам не понадобиться указания никаких кадров-ключей -
достаточно присутствия самого мувера. Откройте свойства мувера, кликнув правой
кнопкой мыши на нем, и зайдите в MoverProperties. Здесь перейдите к пункту
Movement, в котором есть свойство Rotation Rate. Rotation rate включает в себя
три настройки: Pitch, Roll и Yaw. По умолчанию они установлены по нулям -
поэтому мувер не вращается. Маленькие значения, такие как 1, 10, 100 заставит
мувер вращаться очень медленно, и Вы вообще с трудом заметите какое-либо
движение. Значение 1000 - уже более весомо (хотя все же достаточно медленно),
ну а 2000-10000 самый раз для шустрого вращения. Естественно, Вы можете
заставить мувер вращаться с такой скоростью, какой захотите, но при больших
значениях, например 100000, не исключена возможность появления странных
эффектов, особенно когда Вы находитесь непосредственно на мувере (стоите на
нем).

\ картинка - изображен MoveProperties\Movement\Yaw=800  \

Воспользуйтесь свойством Pitch для вращения вокруг оси x, Roll - оси y и Yaw -
оси z. Все просто: если Вам необходимо вращающаяся платформа - измените
значение Yaw, для колес машин же используйте Pitch или Roll.

Вообще у каждого мувера присутствует своя ось/точка вращения. Месторасположение
этой оси указано красной точкой с крестиком. Именно вокруг этой точки и будет
происходить вращение. Пример: цилиндр на первой картинке будет вращаться вокруг
центра, в то время как другой - вокруг одной из своих сторон:

\ две картинки - на одной точка с крестиком в центре мувера-цилиндра,
  на другой - передвинута в точку, в которой сходятся две стороны\

Для того чтобы передвинуть красную точку в другое положение, просто щелкните
мышью на любой точке (vertex) браша мувера и красная точка сама туда
переместится.

Единственный способ поместить ось вращения в место отличное от точки браша, это
сдвинуть браш в упор к краю клетчатой карты. Здесь браш не сможет двигаться
дальше, в то время как красная точка продолжит свое движение за пределы. Затем
сдвиньте Ваш браш в исходное положение.

\ картинка - мувер на краю клетчатого пространства, а крестик - вне
  этого пространства\

Еще одна важная деталь - это установить значение InitialState равным None, т.к.
в противном случае кручение мувера будет прервано когда игрок дотронется до
него. Эта настройка находится в MoverProperties, в пункте Objects.
_______________________________________________________________________________
_______________________________________________________________________________

Муверы с датчиком (Triggered Movers)
____________________________________

Все муверы которые Вы делали ранее активируются при прикосновении игроком.  о
теперь Вы познакомитесь с новым способом активации муверов - датчики
(triggers). Сперва следует сказать как создать такой датчик. Откройте Браузер
Актеров (Actor Class Browser) - он находится в меню View или нажмите на панели
задач кнопку .

\ картинка - кнопка браузера классов - с рисунком пешки\

Здесь зайдите в раздел Triggers и выберете Trigger:

\ картинка - браузер классов с развернутой строкой Triggers\

Датчик активируется, когда игрок попадает в радиус его действия. При этом
датчиком возбуждается действие (event), активирующее мувер или что-нибудь еще.
Устанавливать датчики следует в местах доступных игроку, для того, чтобы он
смог активировать его.

Заставим датчик включать Ваш мувер: у датчика в поле Event укажите имя (Tag)
мувера. Для этого откройте  астройки Датчика (TriggerProperties) - это делается
с помощью нажатия правой кнопкой мыши на датчике. Здесь перейдите к разделу
Events и в поле Event введите в точности имя (Tag) Вашего мувера, например
Mover1. А затем в свойствах мувера (MoverProperties), который необходимо
активировать датчиком, зайдите также в пункт Events, но здесь введите имя
Mover1 в поле Tag. Если проследить логически за всеми манипуляциями получается,
что действие датчика направлено на объект с именем Mover1 - а объект с этим
именем как раз и является Вашим мувером.

\ две картинки - Trigger Properties с развернутой строкой Events, в поле
  Event прописано Mover1 и панель Mover Properties с развернутой строкой
  Events, в поле Tag прописано Mover1.  \

При этом едитор автоматически проведет красную линию из датчика к муверу,
указывая тем самым на их взаимосвязь:

\ картинка - мувер и значек триггера соединены красной линией \

Также Вам необходимо будет указать муверу, что он должен активироваться по
датчику, а не при прикосновении игроком. Заходим в раздел Objects в окне
MoverProperties и здесь воспользуемся свойством InitialState:

\ картинка - в искомом окне в сроке InitialState указано - TriggerOpenTimed \

  None - мувер не воспользуется кадрами-ключами, но все же может быть
  использован в качестве вращающегося мувера или мувера "привязанного" к
  другому муверу;

  StandOpenTimed - то же самое что и BumpOpenTimed;

\ примечание - здесь автор ошибается, StandOpenTimed нужен, если мувер должен
  срабатывать от прикосновения игрока, вернее, мувер, которому указан
  BumpOpen, может быть настроен на срабатывание определенного актора \

  BumpButton - то же самое что и BumpOpenTimed, но без всякой задержки будет
  возвращаться назад;

\ еще одна ошибка - BumpButton нужен, что бы монстры, чей интеллект
  отличается от Mammal (кажется так пишется у рыб и прочих безмозглых
  тварей), воспринимали этот мувер как кнопку и нажимали его. Причем
  делают они это исклучительно (как мне показалось) во время боя.\

  BumpOpenTimed - значение по умолчанию. При прикосновении мувер откроется,
  задержится на несколько секунд и затем закроется;

  TriggerPound - объясняется позже;

  TriggerControl - мувер будет находиться в открытом состоянии, пока Вы
  находитесь в радиусе его действия, как только Вы покинете зону действия
  датчика, мувер закроется;

  TriggerToggle - каждый раз как игрок попадает в радиус действия, мувер будет
  менять свое состояние между открытым и закрытым, т.е. если мувер открыт и
  игрок подействовал на датчик, мувер закроется, при следующей же активации
  датчика, мувер опять откроется и т.д.;

  TriggerOpenTimed - каждый раз при активации датчика мувер открывается на
  определенное время, затем закрывается

Для того чтобы заставить мувер работать согласовано с датчиком, Вам необходимо
будет воспользоваться одним из вышеприведенных опций, например TriggerOpenTimed
или TriggerToggle.

Есть также возможность указать радиус действия датчика: зайдем в
TriggerProperties, раздел Collision:

\ картинка - она самая - Trigger Properties, раздел Collision \

Радиус действия датчика, на самом деле, представляет из себя цилиндр:
используйте CollisionHeight для указания высоты цилиндра и CollisionRadius -
непосредственно для радиуса цилиндра. Пока игрок находится любой точкой своего
тела в этом цилиндре, датчик будет считаться активированным. Очень удобно
посмотреть радиус действия в 2D View (в одном из трех окон: Top, Side или
Front). Для этого нужно нажать правой кнопкой мыши на заголовке
соответствующего окна, зайти в меню Actor и здесь поставить галочку на Radii
View:

\ соответствующая картинка :)

Вернемся к Свойствам Датчика (Trigger Properties), т.к. здесь есть еще
несколько настроек, заслуживающих Вашего внимания. Развернем раздел Trigger:

\ картинка - Trigger Properties с развернутой строкой TriggerType и
  выделено TT_PlayerProximity \

Перечислим наиболее важные из опций:

  bTriggerOnceOnly - если значение установлено true, датчик сработает только
  один раз, и больше не будет действовать;

  DamageThreshold - указывает сколько необходимо нанести урона датчику для его
  активации (работает только при TriggerType установленным TT_Shoot).  иже
  перечислены значения урона наносимого оружием в Unreal Tournament (во всяком
  случае, отталкиваясь от описания в скриптах и свойствах):

    Enforcer: 17
    Pulsegun: 72
    Shockrifle: projectile 55, shot 40, superexplosion (combo) 165
    Enhanced shockrifle: 1000
    Ripper: razorblade 30, explosive razorblade 34 (?)
    Biorifle: small glob 20, large glob 75
    Rocketlauncher: rocket 75, grenade 80
    Flackcannon: flakshell 70, chunk 16
    Redeemer: 1000

  Следовательно, датчик с DamageThreshold = 999 может быть активирован с
  помощью Redeemer, но если DamageThreshold = 1001 Redeemer не поможет;

  Message - это текст, появляющийся в текстовом поле Вашего HUD в момент
  активации датчика;

  RepeatTriggerTime - если у Мувера установлено значение Message, указывает
  сколько секунд будет повторяться это послание пока Вы находитесь в радиусе
  действия датчика. 0 означает что Message отобразится на экране только один
  раз без последующих повторений;

  ReTriggerDelay - если значение отлично от 0, Вы сможете активировать датчик
  только по истечении времени, указанном в TriggerDelay;

  TriggerType - указывает, что может быть причиной активации датчика:

    TT_PlayerProximity - активация происходит при попадании игрока в радиус
    действия датчика;

    TT_PawnProximity - активируется при попадании в радиус действия pawn
    (ракета, ящик, любая декорация);

    TT_ClassProximity - действие вызывается при активации датчика только
    актером (by actor) выбранного класса (class). Пока не работает;

\ дополнение - автор не говорит ничего о ClassProximityTipe, но об этом
  упоминает ниже, описывая Elevator Trigger. Там автор дает ссылку на эту
  главу, но так как здесь ничего нет... Замкнутый круг, кто-то ошибся -
  либо автор, либо 32 Pistoleta (переводчик). Работае это так - при выборе
  TT_ClassProximity необходимо указать в строке ClassProximity тот
  класс, который должен действовать на триггер. Другое дело, что сопряжено
  это с определенным извратом, кнопка Use не всегда работает. \

    TT_AnyProximity - объединяет первые две опции: активируется как игроком,
так и при помощи pawn;

    TT_Shoot - действие возбуждается при нанесении повреждения, и при этом урон
    превышает значение, указанное в DamageThreshold;

\ дополнение - автор ничего не сказал про строку bInitiallyActive, однако
  это очень интересная весч. Если указать в ней False, то триггер не будет
  реагировать на любой "раздражитель". В принципе, это не важно, такой
  триггер явно не несет полезной нагрузки, это как будто его и нет, если
  не знать, что из этого состояния его можно вывести другим триггером,
  связав аналогично примеру с мувером. И переключить обратно. Такая штука
  уже позволит реализовать, вкупе с Dispatcher'ом довольно сложную логику.
  Правда, актуально это скорее в сингле.\


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


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

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

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