sensor


sensor(integer num_detected)

llSensor()関数かllSensorRepeat()関数の検索条件に一致したオブジェクトが発見されたときにこのイベントが発生します。
検出された物の数はnum_detectes引数を通じてスクリプトに渡されます。
それらのオブジェクトに関する情報はllDetected系関数で集めることができます。

もし検索条件に合う物件が検出できないときは代わりにno_sensor()イベントが発生します。

sensor()イベントハンドラは最大で16個までの96m以内にあるオブジェクトを距離順に検出し呼び出されます。

センサーでは乗り物に乗ったアバターは非常に遠居場所に存在するように検出されます。(例:1768mなど)

私が今までに見たことがあるものはほとんどが1,000m以上離れたところにありました! -SchitsoMonkey氏のコメント

以下の例では、
オブジェクトをクリックすると10mの半径以内のあらゆる方向にいるエージェントの存在を一度だけスキャンされます。
複数のエージェントが検出されれば、オブジェクトは整然と彼らの名前を連呼します。

Example:
default
{
   [[touch_start]](integer total_number)
   {
       llSensor("", NULL_KEY, AGENT, 10, PI);
// scan for agents/avatars within 10 metres
   }
   sensor(integer total_number)
// total_number is the number of avatars detected.
   {
       llWhisper(0, (string)total_number
                 + " avatars detected" );
// The following 'for' loop runs through
// all detected avatars and says "Hello Jane Doe",
// where "Jane Doe" is the name of the current detected avatar.
       integer i;
       for (i = 0; i < total_number; i++)
       {
           llWhisper(0, "Hello " + llDetectedName(i));
       }
   }
   no_sensor() {
       llSay(0, "Nobody is around.");
   }
}

Q:センサーの検出範囲がSIMの境界をまたぐ場合、またいだ先のSIM状のエージェントやオブジェクトは検索対象になりますか?

A: すべてのケースで検索対象とはなりません。
現在の1.11付近では、llSensor()は全くsim境界をまたいだ検出はしません、そして、llSensorRepeat()は、境界の向こう側の検出については5秒毎しか検出しないように制限されます。


Q:センサはセンサを含むオブジェクトの中の子プリムを検出できますか?
A: いいえ. センサはリンク中のルートプリムだけを検索対象とし。決してセンサ自体を含むオブジェクトの子プリムは検索対象とはしません。

これは良いことです。さもなければ、リンクされたオブジェクトをリバースエンジニアして、パーミッションの許可を無視し、オブジェクトのプリム構成を解析してオブジェクトの完全なコピーを作ることが可能になってしまうからです。
同様に、装着品を付けているエージェントを検出するのに兆着品の中に含まれたセンサは使用できません。

Q: エージェントがsimの中にいるかだけをチェックする方法がありますか?
A: あります。あなたがエージェントのキーを知っていると仮定する場合、あなたはllKey2Nameを使用できます。 センサは全く必要ではありません。 あなたがキーを知らないなら事情は代わります。

Q: simの中にいるすべてのエージェントのリストを得る方法がありますか?
A: いいえ、センサとかなり巧妙な通信網を整備した多くののオブジェクトをシステムとして構築して、運用しない限りエージェントのリストを得る方法はありません。

Q: センサの発信源はリンクされたオブジェクトのどの位置になりますか?A: A リンクされたオブジェクトののセンサの発信源の座標は関数を呼ぶプリムの座標になります。
リンクセットのルートプリムや中央でありません。

Q:その領域の16以上の結果を検出する方法? 私は、'2番目のセンサ'で16の異なった結果を見つけるために'最初のセンサ'の結果でフィルターするような方法を使ってもよいのでしょうか?
A:
異なるオブジェクトでセンサーを用いて、それらが違うスポットに位置している場合にそれが可能となります。
すべてのエージェントを検出するために、llRegionSay( 'private-channel', "key detected agent"); を使って、オブジェクトたちに一種のサーバーと呼べるような上位オブジェクトとコミュニケーションを取らせましょう。
サーバーにはリストの中のキーと他のオブジェクトから入ってるすべてのキーを比較してリストを作らせ、その後、そのキーやエージェントとの名前をチャットで言わせたり、表示させましょう。
最終更新:2008年10月05日 02:13