ソラマメブログ
< 2025年05月 >
S M T W T F S
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

2007年10月01日

リモートコントローラ(リンデンスクリプト Tips)

 先日、お友達からスクリプトの相談を受けたので説明ついでにTipsにしてみました。
内容は、リモコンを使って、オブジェクトのパーティクルをON/OFFするスクリプトです。
パーティクルには、以前Tipsで紹介したキラキラスクリプトを使用します。

用意するものは、2つのオブジェクトと4つのスクリプトです。

1. オブジェクト
(1)コントローラオブジェクト(本体+ボタン2個)
(2)キラキラオブジェクト
2. スクリプト
(1)コントローラ本体用スクリプト 
(2)ボタン1用スクリプト
(3)ボタン2用スクリプト
(4)キラキラオブジェクト用スクリプト

リモートコントローラ(リンデンスクリプト Tips)

 コントローラのボタン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へ



同じカテゴリー(リンデンスクリプトTips)の記事画像
サウンド再生スクリプト(リンデンスクリプト Tips)
カメラコントロール(リンデンスクリプト Tips)
標準時間表示スクリプト(リンデンスクリプト Tips)
プリムカウンター2(リンデンスクリプト Tips)
土地情報チェッカー(リンデンスクリプト Tips)
SIM負荷チェッカー(リンデンスクリプト Tips)
同じカテゴリー(リンデンスクリプトTips)の記事
 サウンド再生スクリプト(リンデンスクリプト Tips) (2009-12-16 20:13)
 カメラコントロール(リンデンスクリプト Tips) (2009-11-21 21:26)
 標準時間表示スクリプト(リンデンスクリプト Tips) (2009-11-02 00:34)
 プリムカウンター2(リンデンスクリプト Tips) (2009-10-12 20:40)
 土地情報チェッカー(リンデンスクリプト Tips) (2009-10-11 21:33)
 SIM負荷チェッカー(リンデンスクリプト Tips) (2009-08-09 20:26)
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。