ソラマメブログ
HUDCampTimerMessageBoard WittyRadar

2008年03月14日

llSensor(Repeat)からは一度に16件まで。

llSensorRepeatを使ってるんですが、一度に16件までしかデータが返ってこないので調べて見るとここに情報がありました。
http://cheesefactory.us/lslwm/TutorialRobotics.htm
自立して動くオブジェクト(ロボット)のスクリプトみたいなんですが、それにセンサーを使ってるようです。
Sensors
There are a couple of 'gotcha's' with sensors.
* Only the nearest 16 objects are detected
検知されるのは最寄の16件だけとあります。

ですが、オブジェクトのサーチで試して見たところ一度に16件のまま表示が変わらない場合と、
16件と残りと思われる数件を表示するのを交互に繰り返してチラついて見える場合もありました。

先日訳した
http://tanakaakio.slmame.com/e171230.html
なんですがちょっと訂正しました。すいません。

 それでちょうど訂正したとこの記述で、
「・llSensorとllSensorRepeatはllSensorとllSensorRepeatを含むオブジェクトを検知しない。アタッチメントもそうでありセンサースクリプトがあれば装着しているエージェントを検知しない。ただし、センサースクリプトが子プリムにある場合を除く。(色の付いてるところを追加)」
とあるんですが、私が試したところ、llSensorRepeatがオブジェクト中にあってもちゃんと検知しました。
llSensorについては試してませんけど。

それにしても自立ロボットか、おもしろそうだな。
  
Posted by 田中明夫 at 01:10Comments(0)TrackBack(0)llSensor

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

agents (users)

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はアクティブスクリプトまたはスクリプト(アクティブであろうとなかろうと)が動いている物理オブジェクトを検知する。がある、または動いている物理オブジェクトを検知する。(20080502訂正)

・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軸で使わないとならないのです)?
  
Posted by 田中明夫 at 20:51Comments(0)TrackBack(0)llSensor