Движущийся лазер

В изображении выше лазер перемещается по path_track и при соприкосновении с игроком убивает его.
Лазер расположен таким образом, чтобы игрок смог перепрыгнуть через него в любое время.
Игрок не сможет пройти под лазером.
Есть несколько способов создать эффект подобно этому, любые параметры и настройки, используемые в этом туторе могут быть легко изменены как вам угодно.
На каждую сторону были помещены спрайты для эффекта прожига. Также при помощи info_overlay будет создана лужа со звуком всплеска.

Для всего этого нам понадобятся 4 энтити: func_tracktrain (заставляет двигаться наш лазер), env_beam (Луч), env_sprite, (спрайт, по желанию), path_track (путь, по которому двигается лазер).

Расположите все 4 энтити как показано на картинке.

Прозрачный = func_tracktrain (браш, превращенный в Entity func_tracktrain)
Фиолетовый = env_beam
Зеленый = env_sprite
Красный = path_track

Class: env_beam (Луч)

Name: Beam01 (Правую сторону назовите Beam02)
Parent: Beam01train (Правую сторону назовите Beam02train)
Brightness: 75
Beam Color: 255 0 0
Life: 0 (Infinite) (Время существования лазера в секундах, 0= бесконечно)
Width of Beam: 0.7 (Ширина луча)
Noise: 0 («количество» неровностей в луче, 0= прямой луч)
Sprite name: sprites/laserbeam.spr
Texture scroll rate: 40
Damage: 1000 (Урон, наносимый игроку)
Start Entity: Beam01 (Beam02 для правой стороны)
Ending Entity: Beam02 (Beam01 для правой стороны)
Touch Type: Not a tripwire

Flags: Start On


Это параметры настройки для каждого env_sprite, которые используются только для небольшого эффекта (прожига)

Class: env_sprite
Parent: Beam01 (Beam02 для правой стороны)
Render FX: Normal
Render Mode: Additive
FX Amount: 150
FX Color: 255 0 0
Disable receiving shadows: Yes
Frame rate: 10.0
Sprite name: materials/sprites/glow03.vmt
Scale: 0.2 (Масштаб)
Size of Glow: 2.0

Flags: Start on

Все func_tracktrain покрасьте текстурой toolsinvisible.
Параметры настройки для каждого func_tracktrain:

Class: func_tracktrain
Name: Beam01train (Beam02train для правой стороны)
Disable receiving shadows: Yes
Disable Shadows: Yes
First Stop Target: Beam01path01 (Beam02path01 для правой стороны)
Max speed: 60
Initial Speed: 60 (Начальная скорость)
Change Velocity: Instantaneously
Change Angles: Near path_tracks
Distance between the wheels: 10
Height above the track: 0
Bank angle on turns: 0
Move sound: d3_citadel.weapon_zapper_beam_loop1 (только для левой стороны)
Volume: 2

Flags:
No User Control, (Без управления пользователя)
Passable, (Проходимый)
Fixed Orientation, (Установленное передвижение)
Is unblockable by Player.

Все func_tracktrain покрасьте текстурой toolsinvisible. Заметьте, что в изображении ниже присутствуют только 4 path_track (По два на каждой стороне, для каждого func_tracktrain)

На левой стороне первый path_track ссылается (Next Stop Target) на второй path_track, который в свою очередь ссылается на первый path_track, это заставляет перемещаться лазер вперёд назад бесконечно.

Параметры настройки для первого path_track на левой стороне:
Class: path_track
Name: Beam01path01 (Beam02path01 для правой стороны)
Next Stop Target: Beam01path02 (Beam02path02 для правой стороны)

Добавляя больше path_track вы можете заставить лазер перемещаться зигзагообразно. Можно также добавить ещё по несколько лазеров на каждую сторону для двойного эффекта.
Обратите внимание: env_beam использовался на каждой стороне, а не на одной стороне только затем, чтобы лазерный эффект был намного лучше, эксперементируйте.

Водный эффект для лужи сделан при помощи info_overlay.


Class: info_overlay
Material: decals/decalborealispuddle001a

Я поместил env_cubemap, ambient_generic для звука и trigger_multiple, чтобы запустить звук, когда игрок наступает на лужу.


Class: ambient_generic
Name: WaterSound
Sound name: Water. StepLeft
Volume: 4

Flags:
Start Silent
Is NOT Looped,


Class: trigger_multiple
Start disabled: No
Delay before reset: 1

Flags: Clients, Everything

Output:
OnStartTouch, WaterSound, PlaySound

Этот тутор содержит два vmf файла.
Во втором примере Лазер поворачивает за угол и перемещается по другому туннелю.

Заметьте, что спрайты для второго примера не используются. Смотрится лучше без них.
Смотрите на Outputs для path_tracks в углу, два path-track (там, где совершается поворот) должны быть расположены друг напротив друга.
Если вы хотите, чтобы лазер телепортировался в начало движения (т.е. начинал своё перемещение постоянно от первых path_tracks), то в первых двух path_tracks во флагах поставьте «Teleport to this path_track»
Смотрите исходник и всё поймёте

Have fun.
Перевод: NewSirius.
31 декабря 2005, 10:10