アットウィキロゴ
 

サルでも分かるかも知れないパーティクル講座


第2回パーティクルは4種類だけ!


パーティクルには実は4種類のパターンしか存在しない。
それぞれ特徴がある。
このパターンを設定するパラメーターが「PSYS_SRC_PATTERN」だ。
これにに対してオパラメーターの値は以下の4つが存在する。
llParticleSystem([PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE]);
上記のように指定することで変更が可能。

PSYS_SRC_PATTERN_EXPLODE 球状に放射もしくは収縮する
PSYS_SRC_PATTERN_ANGLE 扇状に拡散または収縮する
PSYS_SRC_PATTERN_ANGLE_CONE 円錐状に拡散または収縮する
PSYS_SRC_PATTERN_DROP パーティクルの発生源に停滞し続ける
PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY 中空の円錐状に拡散または収縮する()現在は廃止されている



PSYS_SRC_PATTERN_EXPLODE(球状)例


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_COUNT 
     ,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]]()
   {
          PART_ANGLE_BEGIN = PART_ANGLE_BEGIN*DEG_TO_RAD ;
          PART_ANGLE_END = PART_ANGLE_END*DEG_TO_RAD ;
          llParticleSystem([]);
          sw=0;
   }
   [[touch_start]](integer total_number)
   {
       if(sw==0){sw=1;llSetParticle();}
       else if(sw==1){sw=0;llParticleSystem([]);}
   }
}

PSYS_SRC_PATTERN_ANGLE(扇状)の例

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_COUNT 
     ,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()
   {
          PART_ANGLE_BEGIN = PART_ANGLE_BEGIN*DEG_TO_RAD ;
          PART_ANGLE_END = PART_ANGLE_END*DEG_TO_RAD ;
          llParticleSystem([]);
          sw=0;
   }
   touch_start(integer total_number)
   {
       if(sw==0){sw=1;llSetParticle();}
       else if(sw==1){sw=0;llParticleSystem([]);}
   }
}
最終更新:2008年10月21日 06:17