LSL(Linden Script Language)スクリプトTips集

リンク作成とリンク解除(llBreakLink,llCreateLink関数)

土星みたいなものをつくってみました。
Touchすると、土星と土星の輪が同時に回転します。
もう一度Touchすると土星のみ回転し、土星の輪は回転しません。
これは、2つのオブジェクトをTouchする度に、
リンクとリンク解除を交互に切り替える為、このような動きになっています。
土星の球(こちらが親プリムになります。)の方に下記スクリプトを使います。


default
{
  state_entry()
  {
      llRequestPermissions( llGetOwner() ,PERMISSION_CHANGE_LINKS );
  }
  touch_start(integer total_number)
  {
      if(llGetLinkNumber() ==0){
          llCreateLink("6d0ef6ec-02bb-3d95-9088-df2137215d63",TRUE);
      }else{
          llBreakLink(2);
      }
      llTargetOmega(<0,0,5>,3,3);
  }

}
llGetLinkNumber関数:integer llGetLinkNumber()
リンク番号を取得する(0の場合はリンクされていないということ。)1の場合は親プリムということです。
llCreateLink関数:llCreateLink(key target, integer parent)
一番目のパラメータ :リンクしたいオブジェクトのKEY
          (例の場合、土星の輪にスクリプトを入れllGetKey()で事前にkey値を取得してます。)
二番目のパラメータ :TRUEまたはFALSE。TRUEの場合は、このオブジェクトが親になります。
llBreakLink関数:llBreakLink(integer linknum)
一番目のパラメータ : リンク番号。ここで指定されたリンク番号のリンクを解除します。
リンク番号に2を指定しているのは1が土星の球で2が輪の方だからです。
複数リンクがある場合は、llBreakAllLinks()関数を使うと一度に全てのリンクを解除することができます。

リンクとリンク解除にはPERMISSION_CHANGE_LINKS権限が必要なので、
llRequestPermissionsで取得しています。

スクリプト保存時に青いダイアログメッセージがでて権限を与えるかどうか聞かれます。
リンクとリンク解除にはオブジェクトのオーナーであることとmodify権限が必要です。

尚、llTargetOmega関数はこちらを参考にしてくださいねー。回転させるスクリプト