編集部からのお知らせ
New! 記事まとめ「ISMAP-LIU」
話題の記事まとめ「通信障害と社会リスク」

Second Life 新世界的ものづくりのススメ--その31:パーティクル5 - (page 5)

大槻透世二(サイバーアドベンチャー)

2007-11-08 08:00

 これで最初に見たソースコードと同じになる。「TRUE」か「FALSE」あるいは、最初にある変数の定義部分で数値を変化させれば、パーティクルのいろいろな挙動を試すことができる。少し長いが、これで汎用的に使えるスクリプトが出来上がった。参考のため、ソースコードをテキストでも下に載せておこう。

//==========================================================================
// Particle Script 4.2
//==========================================================================
// Created by Ama Omega : 10-10-2003
// Edited & Updated by Jin Spear : 24-10-2007
//==========================================================================
//
//==========================================================================
// 1.System Behavior //
//==========================================================================
// : Mask Flags - set to TRUE to enable
//--------------------------------------------------------------------------
integer bounce = FALSE;       // Bounce on the center of Object up    
integer glow = TRUE;          // Lighting in the night        
integer followSource = FALSE; // Follow the Object
integer followVel = TRUE;     // Sprit from center to Out
integer interpColor = TRUE;   // Enable "endColor" in 43 line
integer interpSize = TRUE;    // Enable "endColor" in 47 line  
integer wind = FALSE;         // Affected wind force.

//==========================================================================
// 2.System Pesentation // 
//==========================================================================
// : Choose a pattern from the following:
//--------------------------------------------------------------------------
// PSYS_SRC_PATTERN_ANGLE
// PSYS_SRC_PATTERN_ANGLE_CONE
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
// PSYS_SRC_PATTERN_DROP
// PSYS_SRC_PATTERN_EXPLODE
//--------------------------------------------------------------------------
integer pattern = PSYS_SRC_PATTERN_EXPLODE;
float innerAngle = 1.55;   // Inner angle for all ANGLE patterns
float outerAngle = 1.54;   // Outer angle for all ANGLE patterns
float radius = 0;  // Radius to emit particles for BURST pattern

//--------------------------------------------------------------------------
// Select a target for particles to go towards
//--------------------------------------------------------------------------
// "owner" will follow object owner 
// "self" will target this object
//  or put the key of an object for particles to go to
key targetLine = "";  
key targetPosi = ""; 

//==========================================================================
// 3.Particle Appearance //     
//==========================================================================
vector startColor = <0,25,0>;  // Start color of particles 
vector endColor = <0,75,0>;    // End alpha (transparency) value
float startAlpha = 10;         // Start alpha (transparency) value
float endAlpha = 10;           // End alpha (transparency) value
vector startSize = <.5,.5,.5>; // Start size of particles 
vector endSize = <.1,.1,.1>;   // End size of particles 

//--------------------------------------------------------------------------
// Put any texture into Object
//--------------------------------------------------------------------------
// texure name between " and "
string texture = "";      

//==========================================================================
// 4.Particle Flow //
//==========================================================================
float life = 0;  // Life in seconds for the system to make particles
float age = 1.5; // Life of each particle
float rate = .1;        // How fast (rate) to emit particles
integer count = 10;     // How many particles to emit per BURST 

//==========================================================================
// 5.Particle Motion //       
//==========================================================================
vector push = <0,0,1>;   // Force pushed on particles
vector omega = <0,0,10>; // Rotation of ANGLE around the source
float minSpeed = .1;    // Min speed each particle is spit out at
float maxSpeed = .2;    // Max speed each particle is spit out at  

//==========================================================================
// ** Script variables
//==========================================================================
integer flags; 

default
{
    state_entry()
    {
        flags = 0;
        if (targetLine == "owner") targetLine = llGetOwner();
        if (targetLine == "self") targetLine = llGetKey();
        if (targetPosi == "owner") targetPosi = llGetOwner();
        if (targetPosi == "self") targetPosi = llGetKey();
        if (bounce) flags = flags | PSYS_PART_BOUNCE_MASK;
        if (glow) flags = flags | PSYS_PART_EMISSIVE_MASK;
        if (followSource) flags = flags | PSYS_PART_FOLLOW_SRC_MASK;
        if (followVel) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
        if (interpColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK;
        if (interpSize) flags = flags | PSYS_PART_INTERP_SCALE_MASK;
        if (targetLine != "") flags = flags | PSYS_PART_TARGET_LINEAR_MASK;
        if (targetPosi != "") flags = flags | PSYS_PART_TARGET_POS_MASK;
        if (wind) flags = flags | PSYS_PART_WIND_MASK;

        llParticleSystem(
        [                          
            // 1.System Behavior //
            PSYS_PART_FLAGS, flags,
            
            // 2.System Pesentation // 
            PSYS_SRC_PATTERN, pattern,        
            PSYS_SRC_BURST_RADIUS, radius,
            PSYS_SRC_ANGLE_BEGIN, outerAngle,
            PSYS_SRC_ANGLE_END, innerAngle, 
            PSYS_SRC_TARGET_KEY, targetPosi,                        
            PSYS_SRC_TARGET_KEY, targetLine,                        

            // 3.Particle Appearance // 
            PSYS_PART_START_COLOR, startColor,
            PSYS_PART_END_COLOR, endColor,
            PSYS_PART_START_ALPHA, startAlpha,
            PSYS_PART_END_ALPHA, endAlpha,    
            PSYS_PART_START_SCALE, startSize,
            PSYS_PART_END_SCALE, endSize, 
            PSYS_SRC_TEXTURE, "",

            // 4.Particle Flow // 
            PSYS_SRC_MAX_AGE, life,
            PSYS_PART_MAX_AGE, age,
            PSYS_SRC_BURST_RATE, rate,
            PSYS_SRC_BURST_PART_COUNT, count,

            // 5.Particle Motion // 
            PSYS_SRC_ACCEL, push,     
            PSYS_SRC_OMEGA, omega,
            PSYS_SRC_BURST_SPEED_MIN, minSpeed,
            PSYS_SRC_BURST_SPEED_MAX, maxSpeed
        ]);
    }

}

//==========================================================================



 さて、今回で、バイク編の2番目である「パーティクル」が終わった。次回は最後の「乗物エンジン」に移ろう。主に、バイク(2輪車)にはなるが、自動車(4輪車)も同様の原理で動くようになる。

 次回からもかなり長いスクリプトになるが、これをクリアすれば、好きな2輪車や4輪車など、何でも作ることが出来る。それでは、次回もお楽しみに

大槻透世二氏
大槻透世二サイバーアドベンチャー(株)
代表取締役社長/CEO

デジタルハリウッド大学院
次世代インターフェース研究室 研究員
Second Life研究室 研究員/プロデューサー
Linden社推薦 Second Lifeセミナー講師

東北大学心理学専攻卒業。1年間のLA留学を経て、ソリッドレイ研究所でバーチャルリアリティのシステムインテグレーション、立体映像システム構築、HMDシステム構築などを経験。IT系コンサルティング会社を経て、デジタルハリウッド大学大学院コンテンツマネジメント修士課程修了(MCA)。その後、Linden Lab本社にてSecond Lifeカリキュラムのトレーニングを受ける。現在デジタルハリウッドにて「Second Life」セミナーを開催。また、バーチャルリアリティ、メタバース関連のシステム開発/プロデュースを行うサイバーアドベンチャー(株)を設立し、そのCEO職に就いている。

ZDNet Japan 記事を毎朝メールでまとめ読み(登録無料)

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNet Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]