<<<Назад <<< <<<Меню>>> >>> Далее>>>

Drop tutorial (огонь, вода, дым) как это сделать

Reference
Drop [ShapeName, AnimationName, Type, TimerPeriod, LifeTime, Position, MoveVelocity, RotationVelocity, Weight, Volume, Rubbing, Size, Color, AnimationPhase, RandomDirectionPeriod, RandomDirectionIntensity, OnTimer, BeforeDestroy, Object]

Variable
ShapeNameЭтот параметр определяет модель которая будет использоваться для эффектовString (Путь к p3d-файлу)
TypeТип частицы плоский или нет ("Billboard" или "SpaceObject")String (Тип частицы)
AnimationNameОпределяет используемую анимацию для частицыString (имя класса анимации)
TimerPeriodПериод времениЛюбое значение
LifeTimeВремя, после которого частица будет разрушенаЛюбое значение
PositionРасположение частицы относительно карты, или объекта если он указанВектор(3-Array)
MoveVelocityВектор скорости частицыВектор(3-Array)
RotationVelocityСкорость вращения частицы в секундуЛюбое значение
WeightМасса частицыЛюбое значение
VolumeОбьёмЛюбое значение
RubbingТрениеЛюбое значение
SizeРазмер частицыArray
ColorЦвет частицыArray
AnimationPhaseФаза анимацииArray
RandomDirectionPeriodПараметр устанавливает случайные отклонения для частицыЛюбое значение
RandomDirectionIntensityИнтенсивность отклонения частицыЛюбое значение
OnTimerСкрипт, который будет выполнен после того как частица будет создана командойString (Путь к скрипту)
BeforeDestroyСкрипт, который будет выполнен после того как частица будет разрушена командой LifeTimeString (Путь к скрипту)
ObjectОбъект от которого берутся координатыObject


Первое это ShapeName

У вас наверное сразу возник вопрос какие модели могут использоваться для частиц, любые! Но они будут выглядеть не как знакомый вам объект а, его плоская проекция, вот наиболее подходящие модели для частиц но вы можете экспериментировать с ними.
cl_water.p3d: хорошо подходит для частиц дыма
cl_fire.p3d: хорошо подходит для частиц огня
cl_water.p3d: хорошо подходит для частиц воды
И ещё одна подходящая моделька - kouleSvetlo.p3d хорошо подходит для частиц типа сигнальных ракет.
Если вы используете cl_water.p3d или cl_water.p3d для мелких частиц то разницы практически не видно, но у больших частиц различия очень большие. Вы не должны писать расширения файла.
Пример: ShapeName = "cl_basic"


Второе это Type

Если вы используете частицу в качестве простого эффекта воды или огня то ставим тип частицы "Billboards", плоские частицы это частицы при просмотре которых они с любой стороны одинаковые (плоские)!
Есть и не плоские объекты типа там Т-80 или калашик, т.е при просмотре с различных углов они не одинаковой формы, вот к таким объектам чтоб они не были плоские и надо применять параметр "SpaceObject"!
Пример: Type = "Billboard"


Третье это AnimationName

Вы можете оживлять p3d-модели при помощи програм Maya (Plugin) или (OFPAnim). Вызывается анимация из класса прописанного в config.cpp.
Теперь про фазу анимации если 0 то начало если 1 конец
Пример: AnimationPhase = [0, 1, 0]
В этом примере три параметра фазы как их понять. Допустим время жизни этой частицы равно 2 сек. Тогда в начале её жизни начальная фаза анимации 0 (дверь закрыта). Через сеунду (середина времени жизни) фаза1 (дверь открыта), через 2 секунды (конец времени жизни частицы) снова фаза 0 и (дверь закрыта).


Четвёртое это Timer Event

Частицы имеют так называемый таймер, вызываемый периодически. После того, как этот таймер был вызван, указанный скрипт выполнен.
Но остерегайтесь: ни когда не ставьте значение 0 это приведёт к постоянному зацикливанию и как следствие вылет из игры. Пример показывает что скрипт “spark.sqs” будет выполнен каждые 1.5 секунд
TimerPeriod = 1.5
OnTimer = "spark.sqs"

Естественно мы должны определить срок службы жизни большее чем 2 секунды, или наш таймер не будет вызываться!


Пятое это Origin and velocity

Есть два способа определения координат это относительно кары и относительно объекта, если вы решили что вам не нужно делать частицы относительно кокого-то объекта то просто не пишете имя объекта, и частица будет создана относительно координат карты, Слиже вам нужно чтоб частица появлялась строго на месте объекта то пишите имя объекта а смещение относительно его ставите на ноль вот так Position = [0,0,0]; Object = "MyT80".
Этот пример: показывает что частица строится не относительно объекта а, относительно координатной плоскости, и появится в точке с координатами X=1000 и Y=1000 и Z=50 (высота над землёй)
Object = ""
Position = [1000, 1000, 50]

Этот пример: показывает что частица строится относительно объекта под именем MyT80 по осям с координатами X=0 и Y=0 и Z=1 (высота над объектом)
Object = "MyT80"
Position = [0, 0, 1]

Это параметр вектора скорости, то есть куда будет лететь частица в примере показано что частица будет лететь со скорость 10 м\с на север.
MoveVelocity = [0, 10, 0]


Шестое это направление

Координатная сетка
Чтобы дать предмету определенный угол надо этот угол указать примерно так MyT80 SetDir 0, а проверить вот как (getDir MyT80 == 0) при этом объект будет повёрнут на север.
MyT80 SetDir 45, а проверить вот как (getDir MyT80 == 45) при этом объект будет повёрнут на Северо-Восток.


Седьмое это Mass, Volume, Friction

Много раз, при написании подобных скриптов вы наверное себя спрашивали, как сделать чтобы частица летела не вниз а, вверх?
Так вот, в OFP это рассчитывается как из курса физики вы наверное знаете формулу:
p = m /V
P-Плотность воздуха
m-Масса объекта
V-0бьем объекта
В книжке по физике я нашел, что плотность для сухого воздуха состовляет 1,29 кг/м. В OFP это - 1,275 кг/м, так, если ваша частица имеет объем 1 м тогда, Вы нуждаетесь в массе 1.275 (1,275 кг), частица будет висеть в воздухе. Если масса большая чем 1.275, то частица падает, - если масса меньшая, частица будет лететь в небо.
Weight = 1.275
volume = 1


Rubbing это сила трения давайте её не брать во внимание

Rubbing = 0


Восьмое это Цвет и размер

В OFP при создании частиц можно использовать сразу несколько цветов тоесть сначала частица красная, потом зелёная и затем синия.
color = [ [1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 1] ]
Цвет формируется по типу RGBA т.е [красный, зелёный, синий, прозрачность] [RED, GREEN, BLUE, ALPHA]
Все цвета смешиваются а, ALPHA- это прозрачность если 1 то не прозрачно 0 полностью прозрачно (невидима)
Тот же принцип и с размером в примере ниже показано что сначало частица создаётся с размером 0.3 м затем меняется на 7 м и затем 0!
size = [0.3, 7, 0]


Девятоё это случайные отклонения

Некоторые частицы в Реальной Жизни, подобно искрам, перемещаются очень не равномерно, так что есть возможность брать те случайные скоростные изменения во внимание!
Есть два параметра, один в течение какого периода это будет происходить и один для нтенсивности изменений.
RandomDirectionPeriod = 1
RandomDirectionIntensity = 0.5

В этом случае наша частица изменяет скорость каждую секунду (RandomDirectionPeriod = 1) и скоростной вектор с различием 0,5 м/с.


И десятое это открытие скриптов после уничтожения частицы

Наша частица живёт 5 сек и уничтожается
LifeTime = 5
Через 5 сек после того как частица будет уничтожена будет вызван скрипт и координаты этой частицы автоматически будут переданы в скрипт myScript.sqs вы получаете координаты с _this переменной в своём скрипте пример _pos = _this
beforeDestroy = "myScript.sqs"


<<<Назад <<< <<<Меню>>> >>> Далее>>>