BlackSheep-LSL@Wiki llDetectedLinkNumber
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

llDetectedLinkNumber

integer llDetectedLinkNumber(integer number)

タッチもしくは衝突イベントがどのprimにおいて起こったのかを取得する。
戻り値はリンクナンバーである。
例えばタッチイベント内で使用した場合は、タッチされたprimのリンクナンバーを返す。
衝突イベント内であれば、衝突したprimのリンクナンバーを返す。

オブジェクトが単一primの場合は、戻り値は0である。
2つ以上のprimがリンクされていた場合、ルートprimは1、2以降は子primとなる。

この関数はタッチイベントもしくは衝突イベント内でしか効果がない。

llDetectedLinkNumberはデテクト系の関数の一つである。
デテクト系関数についてはllDetectedKeyの説明もしくは初級スクリプト第二十回「センサーを使おう」のセンサーイベントについての説明を参照のこと。

以下の例はタッチされたprimのリンクナンバーを表示する。

default {
  touch_start(integer num_detected){
    llSay(0, "Link number " + llDetectedLinkNumber(0)
      + " is touched.");
  }
}

この関数の最も便利な使い道は、HUDなど「ボタン」を持つオブジェクトにおいて、どのボタンが押されたのかの判別を行うことである。
以下はタッチされたprimの「名称」に応じて処理を行う。
リンクナンバーそのものはオブジェクトを編集する過程で変化する可能性があるため、以下のような実装をしておいたほうがメンテナンス性が良い。

default {
  touch_start(integer num_detected){
    string prim_name = llGetLinkName(llDetectedLinkNumber(0));
    if (prim_name == "button1"){
      llSay(0, "Button1 was clicked.");
    }else if (prim_name == "button2"){
      llSay(0, "Button2 was clicked.");
    }else if (prim_name == "button3"){
      llSay(0, "Button3 was clicked.");
    }else if (prim_name == "button4"){
      llSay(0, "Button4 was clicked.");
    }
  }
}

なお、子primからタッチや衝突イベントを非通知にするには、llPassTouches関数やllPassCollisions関数を使用する。