Часть 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'ом довольно сложную логику.
Правда, актуально это скорее в сингле.\
Страница 123456 <<< Предыдущая Следущая >>>Содержание