サルでも分かるかも知れないパーティクル講座
第1回llParticleSystem()関数の使い方
パーティクルを制御する関数は唯一無二、「llParticleSystem()関数」だけだ。つまり、パーティクルを使うとはこのllParticleSystem()関数を使い方を覚えるという意味である。
llParticleSystem()関数はたくさんのパラメーターやフラグがある。
それらはすべてリスト形式で指定することになる。
パラメーターやフラグそれぞれの働きについては次回以降順々に説明する。
パラメーターを指定する
パラメーターは次の形式で指定する。
[<パラメーター名>,<パラメーターの値>]
複数のパラメーターを指定するには次のような形式で与えられる。
[
<パラメーター名1>,<パラメーターの値1>,
<パラメーター名2>,<パラメーターの値2>,
<パラメーター名3>,<パラメーターの値3>,
...............................
<パラメーター名4>,<パラメーターの値n>
]
フラグを指定する
フラグはパラメーターと同じような指定の仕方をする。
フラグは次の形式で指定する。
[PSYS_PART_FLAGS ,<使用するフラグの値>]
複数のフラグを指定するには次のような形式で与えられる。
[
PSYS_PART_FLAGS ,
<使用するフラグの値1>|
<使用するフラグの値2>|
<使用するフラグの値3>|
..................
<使用するフラグの値n>
]
複数のパラメータとフラグを同時に指定する
[
<パラメーター名1>,<パラメーターの値1>,
<パラメーター名2>,<パラメーターの値2>,
<パラメーター名3>,<パラメーターの値3>,
...............................
<パラメーター名4>,<パラメーターの値n>,
PSYS_PART_FLAGS ,
<使用するフラグの値1>|
<使用するフラグの値2>|
<使用するフラグの値3>|
..................
<使用するフラグの値n>
]
使用例1
llParticleSystem(
[ PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE
,PSYS_PART_START_ALPHA,1.0
,PSYS_PART_END_ALPHA,1.0
,PSYS_PART_START_COLOR,<1.0,1.0,1.0>
,PSYS_PART_END_COLOR,<1.0,1.0,1.0>
,PSYS_PART_START_SCALE,<1.0,1.0,1.0>
,PSYS_PART_END_SCALE,<1.0,1.0,1.0>
,PSYS_SRC_MAX_AGE,0
,PSYS_PART_MAX_AGE,1
,PSYS_SRC_ACCEL, <0,0,0>
,PSYS_SRC_ANGLE_BEGIN,0
,PSYS_SRC_ANGLE_END, 0
,PSYS_SRC_BURST_PART_COUNT,10
,PSYS_SRC_BURST_RADIUS,0
,PSYS_SRC_BURST_RATE, 0
,PSYS_SRC_BURST_SPEED_MIN, 1
,PSYS_SRC_BURST_SPEED_MAX, 1
,PSYS_SRC_OMEGA, <0,0,0>
,PSYS_SRC_TEXTURE, ""
,PSYS_SRC_TARGET_KEY,NULL_KEY
]);
使用例2
llParticleSystem(
[ PSYS_PART_FLAGS ,PSYS_PART_BOUNCE_MASK|
PSYS_PART_EMISSIVE_MASK|
PSYS_PART_FOLLOW_SRC_MASK|
PSYS_PART_FOLLOW_VELOCITY_MASK|
PSYS_PART_INTERP_COLOR_MASK|
PSYS_PART_INTERP_SCALE_MASK|
PSYS_PART_TARGET_LINEAR_MASK|
PSYS_PART_TARGET_POS_MASK
]);
使用例3
llParticleSystem(
[ PSYS_PART_FLAGS ,PSYS_PART_BOUNCE_MASK|
PSYS_PART_EMISSIVE_MASK|
PSYS_PART_FOLLOW_SRC_MASK|
PSYS_PART_FOLLOW_VELOCITY_MASK|
PSYS_PART_INTERP_COLOR_MASK|
PSYS_PART_INTERP_SCALE_MASK|
PSYS_PART_TARGET_LINEAR_MASK|
PSYS_PART_TARGET_POS_MASK
PSYS_PART_WIND_MASK
,PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE
,PSYS_PART_START_ALPHA,1.0
,PSYS_PART_END_ALPHA,1.0
,PSYS_PART_START_COLOR,<1.0,1.0,1.0>
,PSYS_PART_END_COLOR,<1.0,1.0,1.0>
,PSYS_PART_START_SCALE,<1.0,1.0,1.0>
,PSYS_PART_END_SCALE,<1.0,1.0,1.0>
,PSYS_SRC_MAX_AGE,0
,PSYS_PART_MAX_AGE,1
,PSYS_SRC_ACCEL, <0,0,0>
,PSYS_SRC_ANGLE_BEGIN,0
,PSYS_SRC_ANGLE_END, 0
,PSYS_SRC_BURST_PART_COUNT,10
,PSYS_SRC_BURST_RADIUS,0
,PSYS_SRC_BURST_RATE, 0
,PSYS_SRC_BURST_SPEED_MIN, 1
,PSYS_SRC_BURST_SPEED_MAX, 1
,PSYS_SRC_OMEGA, <0,0,0>
,PSYS_SRC_TEXTURE, ""
,PSYS_SRC_TARGET_KEY,NULL_KEY
]);
パーティクル制御用関数
しかし、上記ような指定しかたでも良いが、実際にはパーティクル制御用関数ユーザーで作ってをつかうことが多い。以後の「サルでも分かる(かも知れない)
パーティクル講座」(サルパー)では以下のスクリプトを例題として多用することとする。
integer PART_BOUNCE_MASK=FALSE; //PSYS_PART_BOUNCE_MASK
integer PART_EMISSIVE_MASK=FALSE;//PSYS_PART_EMISSIVE_MASK
integer PART_FOLLOW_SRC_MASK=FALSE;//PSYS_PART_FOLLOW_SRC_MASK
integer PART_FOLLOW_VELOCITY_MASK=FALSE;//PSYS_PART_FOLLOW_VELOCITY_MASK
integer PART_INTERP_COLOR_MASK=FALSE;//PSYS_PART_INTERP_COLOR_MASK
integer PART_INTERP_SCALE_MASK=FALSE;//PSYS_PART_INTERP_SCALE_MASK
integer PART_TARGET_LINEAR_MASK=FALSE;//PSYS_PART_TARGET_LINEAR_MASK
integer PART_TARGET_POS_MASK=FALSE;//PSYS_PART_TARGET_POS_MASK
integer PART_WIND_MASK=FALSE;//PSYS_PART_WIND_MASK
integer PART_PATTERN = PSYS_SRC_PATTERN_EXPLODE ;
//PSYS_SRC_PATTERN_ANGLE
//PSYS_SRC_PATTERN_ANGLE_CONE
//PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
//PSYS_SRC_PATTERN_DROP
float PART_START_ALPHA = 1.0;
float PART_END_ALPHA = 1.0;
vector PART_START_COLOR = <0.0,1.0,1.0>;
vector PART_END_COLOR = <0.0,1.0,1.0>;
vector PART_START_SCALE = <0.5,0.5,0.5>;
vector PART_END_SCALE = <0.3,0.3,0.3>;
float SRC_MAX_AGE = 0.0;
float PART_MAX_AGE = 2;
vector PART_ACCEL = <0.0,0.0,0.0>;
float PART_ANGLE_BEGIN = 0;
float PART_ANGLE_END = 0;
integer PART_BURST_COUNT = 10 ;
float PART_BURST_RADIUS = 0 ;
float PART_BURST_RATE = 0.0 ;
float PART_BURST_SPEED_MIN = 1 ;
float PART_BURST_SPEED_MAX = 0 ;
vector PART_OMEGA = <0.0,0.0,0.0> ;
string PART_TEXTURE = "" ;
key PART_TARGET_KEY = "self";
llSetParticle(){
if (PSYS_PART_TARGET_POS_MASK==TRUE)
{
if(PART_TARGET_KEY=="self"){PART_TARGET_KEY=llGetKey();}
if(PART_TARGET_KEY=="owner"){PART_TARGET_KEY=llGetOwner();}
}
llParticleSystem(
[ PSYS_PART_FLAGS ,PSYS_PART_BOUNCE_MASK*PART_BOUNCE_MASK |
PSYS_PART_EMISSIVE_MASK*PART_EMISSIVE_MASK|
PSYS_PART_FOLLOW_SRC_MASK*PART_FOLLOW_SRC_MASK|
PSYS_PART_FOLLOW_VELOCITY_MASK*PART_FOLLOW_VELOCITY_MASK|
PSYS_PART_INTERP_COLOR_MASK*PART_INTERP_COLOR_MASK|
PSYS_PART_INTERP_SCALE_MASK*PART_INTERP_SCALE_MASK|
PSYS_PART_TARGET_LINEAR_MASK*PART_TARGET_LINEAR_MASK|
PSYS_PART_TARGET_POS_MASK*PART_TARGET_POS_MASK|
PSYS_PART_WIND_MASK*PART_WIND_MASK
,PSYS_SRC_PATTERN, PART_PATTERN
,PSYS_PART_START_ALPHA, PART_START_ALPHA
,PSYS_PART_END_ALPHA, PART_END_ALPHA
,PSYS_PART_START_COLOR, PART_START_COLOR
,PSYS_PART_END_COLOR, PART_END_COLOR
,PSYS_PART_START_SCALE, PART_START_SCALE
,PSYS_PART_END_SCALE, PART_END_SCALE
,PSYS_SRC_MAX_AGE, SRC_MAX_AGE
,PSYS_PART_MAX_AGE, PART_MAX_AGE
,PSYS_SRC_ACCEL, PART_ACCEL
,PSYS_SRC_ANGLE_BEGIN, PART_ANGLE_BEGIN
,PSYS_SRC_ANGLE_END, PART_ANGLE_END
,PSYS_SRC_BURST_PART_COUNT, PART_BURST_COU NT
,PSYS_SRC_BURST_RADIUS, PART_BURST_RADIUS
,PSYS_SRC_BURST_RATE, PART_BURST_RATE
,PSYS_SRC_BURST_SPEED_MIN, PART_BURST_SPEED_MIN
,PSYS_SRC_BURST_SPEED_MAX, PART_BURST_SPEED_MAX
,PSYS_SRC_OMEGA, PART_OMEGA
,PSYS_SRC_TEXTURE, PART_TEXTURE
,PSYS_SRC_TARGET_KEY, PART_TARGET_KEY
]);
}
integer sw=0;
default
{
[[state_entry]]()
{
llParticleSystem([]);
sw=0;
PART_ANGLE_BEGIN = PART_ANGLE_BEGIN*DEG_TO_RAD ;
PART_ANGLE_END = PART_ANGLE_END*DEG_TO_RAD ;
}
[[touch_start]](integer total_number)
{
if(sw==0){sw=1;llSetParticle();}
else if(sw==1){sw=0;llParticleSystem([]);}
}
}
最終更新:2008年10月19日 12:34