先日、お友達からスクリプトの相談を受けたので説明ついでにTipsにしてみました。
内容は、リモコンを使って、オブジェクトのパーティクルをON/OFFするスクリプトです。
パーティクルには、以前Tipsで紹介したキラキラスクリプトを使用します。
用意するものは、2つのオブジェクトと4つのスクリプトです。
1. オブジェクト
(1)コントローラオブジェクト(本体+ボタン2個)
(2)キラキラオブジェクト
2. スクリプト
(1)コントローラ本体用スクリプト
(2)ボタン1用スクリプト
(3)ボタン2用スクリプト
(4)キラキラオブジェクト用スクリプト
コントローラのボタン1を押すと、オブジェクトがキラキラ光ります。
ボタン2を押すと、キラキラをOFFします。
コントローラは、HUDとして装備すれば便利です。
「作成方法」
1. コントローラ用のオブジェクトを作成します。
本体となる箱と2つのボタンの計3つのプリムを使用します。
本体がルートプリムとなるように3つのプリムをリンクします。
コントローラのオブジェクト名は、"controller"としてください。
2. パーティクルを発生させるためのオブジェクトを作成します。
3. それぞれのプリムのコンテンツにスクリプトを書き込みます。
以下はスクリプトの内容です。
<コントローラ本体用スクリプト>
-----------------------------------
default {
link_message(integer sender_num, integer num, string str, key id){
llWhisper(-1,str);
}
}
<ボタン1用スクリプト>
-----------------------------------
string msg = "ON";
default {
touch_start(integer detected){
if (llDetectedKey(0) == llGetOwner()) {
llMessageLinked(LINK_ROOT,0,msg, NULL_KEY);
}
}
}
<ボタン2用スクリプト>
-----------------------------------
string msg = "OFF";
default {
touch_start(integer detected){
if (llDetectedKey(0) == llGetOwner()) {
llMessageLinked(LINK_ROOT,0,msg, NULL_KEY);
}
}
}
<キラキラオブジェクト用スクリプト>
-----------------------------------
string objName = "controller";
integer handle;
kirakira (string msg) {
if (msg=="ON") {
llParticleSystem([
PSYS_PART_START_SCALE, <0.04, 0.4, 0>,
PSYS_PART_END_SCALE, <0.04, 0.6, 0>,
PSYS_PART_START_COLOR, <1.0, 1.0, 1.0>,
PSYS_PART_END_COLOR, <1.8, 1.8, 1.0>,
PSYS_PART_START_ALPHA, 1.0,
PSYS_PART_END_ALPHA, 0.1,
PSYS_SRC_BURST_PART_COUNT, 5,
PSYS_SRC_BURST_RATE, 3.0,
PSYS_PART_MAX_AGE, 0.2,
PSYS_SRC_MAX_AGE, 0.0,
PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE_CONE,
PSYS_SRC_ACCEL, <0.0, 0.0, 0.0>,
PSYS_SRC_BURST_SPEED_MIN, 0.1,
PSYS_SRC_BURST_SPEED_MAX, 0.1,
PSYS_SRC_ANGLE_BEGIN, PI,
PSYS_SRC_ANGLE_END, 0*DEG_TO_RAD,
PSYS_PART_FLAGS, ( 0
| PSYS_PART_INTERP_COLOR_MASK
| PSYS_PART_INTERP_SCALE_MASK
| PSYS_PART_EMISSIVE_MASK
| PSYS_PART_FOLLOW_SRC_MASK
| PSYS_PART_FOLLOW_VELOCITY_MASK
)
]);
} else if (msg=="OFF") {
llParticleSystem([]);
}
llOwnerSay("KIRAKIRA " + msg);
}
default {
state_entry(){
handle=llListen(-1,objName,"", "");
}
on_rez(integer param){
llResetScript();
}
listen(integer ch, string name, key id, string message){
kirakira(message);
}
}
「スクリプトの説明」
(1)ボタンをクリックするとllMessageLinkedを使用して、ルートプリムにメッセージ(ON or OFF)を送ります。
(2)メッセージを受信したルートプリム(コントローラ本体)は、llWhisperを使用して、チャットチャンネル-1で
メッセージを発信します。
(3)キラキラオブジェクト側では、llListenを使用して、チャットチャンネル-1で、"controller"という名前の
オブジェクトからの発言を待っています。
(4)コントローラからの発信をリッスンしたキラキラオブジェクトは、メッセージ内容に応じて、パーティクルを
ON/OFFします。
リンデンスクリプト Tips Intexへ