2008年03月11日
llSensorの訳(旧LSL wiki)
http://rpgstats.com/wiki/index.php?title=LlSensorの訳です。
訂正:装着しているエージェントを
の部分を追加(2008.03.14)。
慣れないことをしてしまいました。
LSL Wikiの新しいドメインのもありますが、古いドメインの方です。
本家リンデンのWikiと新旧LSL Wiki、似たような機能のllSensorとllSensorRepeatがあり、
混乱しました。というか今でも混乱していますが。
センサーについてちょっと調べてるんですが、翻訳してますます訳が分からなくなったようなw
なんでこんな妙な仕様なんだろな。
一晩寝たら少しは頭に入ってることを期待してますけど。
llSensor
llSensor(string name, key id, integer type, float range, float arc)
range(範囲:メートル)とarc(X軸に沿った前方ベクトルのラジアン弧)の範囲内で、
指定したtype(AGENT, ACTIVE, PASSIE, および/または SCRIPTED)で、
nameとidを探すセンサースキャンを一つ実行する。
PIラジアンは全方向をサーチする。0.0rangeではスキャンは行われないので注意。
nameとidのフィルターを必要としない。
nameがnull stringなら(""のこと)、llSensor()はあらゆる名前のオブジェクトを探す。idがNULL_KEYならば、llSensor()はあらゆるidをサーチする。
rangeの上限は96mである。値が96mを超えても受け付けるが96mとして扱われる。
rangeが0.0ならスキャンは実行されないので注意。
センサースキャンを繰り返すllSensorRepeatと比較のこと。
条件にマッチしたものが見つかるとsensor eventが発生し、何も見つからないとno_sensorが発生する。
sensorのところに実例があるので参照のこと。
type(タイプ)の定数 :
| 定数 | 値 | 探索 |
| AGENT | 1 | |
| ACTIVE | 2 | 動いているphysical(物理)オブジェクトまたはactive(アクティブ)な script(スクリプト)のあるオブジェクト[1] |
| PASSIVE | 4 | スクリプトがないまたはスクリプトがinactive(インアクティブ)[2]でnon-physical(非物理)または、止まっている物理オブジェクト |
| SCRIPTED | 8 | active(アクティブ)[3]なスクリプトがあるオブジェクト |
[1] Active(アクティブ): スクリプトが実行されていて今何かしている。簡単なデフォルトのスクリプトが実行中でもアクティブにはならないが、llListenのようなモニタリング命令があるスクリプトは常にアクティブである。
アクティブとはより多くのsimリソースを使用しているということである。
[2] Inactive(インアクティブ): 実行中のスクリプトがイベントを待っている状態で、いかなるモニタリング(llListenのような)もしていない。ごく僅かなsimリソースしか使われていない。
[3] Running(実行中)のスクリプトはアクティブまたはインアクティブの可能性がある。 (SL流にいえば, アクティブまたはパッシブ)。
内容
注釈
SCRIPTEDと他のフラグとの組み合わせ
検知範囲円錐
センサーの視覚化
注釈
・値をビット演算のOR(|)で組み合わせて複数のカテゴリーをサーチできる。
例えば、llSensor("", NULL_KEY, AGENT | ACTIVE, 25, PI)は、agentと物理オブジェクトの両方をサーチする。
・PASSIVE、ACTIVE、および/またはSCRIPTEDオブジェクトが検知された後に、
llDetectedTypeをACTIVEフラグ(物理)とPASSIVEフラグ(非物理、オブジェクトにアクティブなスクリプトがあったとしても)のチェックに使うことができる。
SCRIPTEDフラグはいつもアクティブスクリプトを単に検知、適合させるだけでのようである。よってllSensorとllDetectedTypeではPASSIVEフラグとACTIVEフラグの使い方が違うようである。
検知オブジェクトのタイプについてもっと情報があるObject Typeを参照。
・センサーは、オブジェクトの中心(center)が検知範囲円錐(下を参照)内にあるときにだけ、オブジェクトを検知する。このため特に壁のような大きなオブジェクトを避けて、センサーを探索に使うのが難しくなっている。
・センサーは他のオブジェクトの子プリムを検知するのに使用できない。
・llSensorとllSensorRepeatはllSensorとllSensorRepeatを含むオブジェクトを検知しない。アタッチメントもそうでありセンサースクリプトがあれば装着しているエージェントを検知しない。ただし、センサースクリプトが子プリムにある場合を除く。
・nameパラメータは大文字と小文字を区別し、名前の一部だけでは検知しない。例えば、オブジェクトの名前が「Object」だとすると、「object」や「Obj」ではマッチせず「Object」だけがマッチする。
・llSensorは同じsim内にあるオブジェクトだけを検知する。もし隣接のsimにあるオブジェクトを検知する必要があるならllSensorRepeatを使用する。
・SCRIPTEDを他のフラグと組み合わせたときは奇妙である。下記参照。
SCRIPTEDと他のフラグとの組み合わせ
SCRIPTEDと他のフラグとの組み合わせは、少し直感的にわかりにくい結果になる可能性がある。
・SCRIPTEDはアクティブスクリプトまたはスクリプト(アクティブであろうとなかろうと)
・AGENT | SCRIPTEDはアクティブスクリプトまたはスクリプト(アクティブであろうとなかろうと)がある動いている物理オブジェクトを検知する。agentは検知しない!
・ACTIVE | SCRIPTEDはアクティブスクリプトまたはスクリプト(アクティブであろうとなかろうと)がある動いている物理オブジェクトを検知するが、スクリプトのない動くオブジェクトは検知しない。
・PASSIVE | SCRIPTEDはアクティブスクリプト、スクリプトのない非物理オブジェクトとスクリプト(アクティブであろうとなかろうと)のある物理オブジェクトを検知する。スクリプトのない静止している物理オブジェクトは検知しない。
検知範囲円錐(arc)
・arcがxラジアンなら、センサーはオブジェクトの前方ベクトルの周りのxラジアン内を探す(これはオブジェクトのローカルx座標、プラスの方向)、よって実際サーチの振りは2 * xラジアンであり、だからPIラジアンだとオブジェクトのまわり全てをサーチする。
・SLの表現では、球の半径で定義されたrangeとarcはそれ自身くぼんでおり、それが描くセンサーの振るエリアもくぼんだ球である。
・アタッチメントでのセンサーはアバタの向いている前面のベクトル方向を使用する。
マウスルックではどこでもアバタが見ている所であり、マウスルックでないときは何処であろうとアバタの向いている方向である。これは、アバタの頭がどっちを向いているのかということではない。
そうでないとアニメーションをアバタが行っていると、前に向かって歩いていたとしても方向が動いてしまう。
どこにオブジェクトをアタッチしているかに関係なくそうである。
センサーの視覚化
これは arc = PI / 4 でこのようにX軸の周りを45度で半径内をスキャンする:

video (MPEG, 630KB) of it rotating
arc = PI_BY_TWO (X軸の周り90度、球の半分=半球に向けた場合)である:

そして arc = PI (X軸の周り180度の場合は球となる):

Q:アタッチメントを検知するのにセンサーを使えますか?
A:いいえ。しかし、llGetAgentInfoでアバタがアタッチメントを持っているかどうか、スクリプトを使っているかどうかはわかります。いくつアタッチメントを持っているか、どこに何を装着しているかは分かりませんが。
Q:どの軸からセンサーの検知範囲円錐を始めるか指定することはできますか(オブジェクトをX軸ではなくてY軸で使わないとならないのです)?

この記事へのトラックバックURL
http://tanakaakio.slmame.com/t171230


