llGetBoundingBox
list llGetBoundingBox(key object)
指定したUUIDのオブジェクト(またはアバター)の当たり判定領域を取得する。
当たり判定の領域のことをバウンディングボックスと言う。
当たり判定の領域のことをバウンディングボックスと言う。
通常バウンディングボックスはオブジェクトをすっぽり覆う立方体で示される。
この関数の戻り値は、vector型変数を二つ含むリストである。
二つのvectorは、バウンディングボックスの最小コーナー座標及び最大コーナー座標を示す。
この関数の戻り値は、vector型変数を二つ含むリストである。
二つのvectorは、バウンディングボックスの最小コーナー座標及び最大コーナー座標を示す。
以下の例はLSL-Wikiからそのまま持ってきたスクリプトであるが、バウンディングボックスを視覚化する。
半透明のキューブに以下のスクリプトを仕込み、チャンネル3で対象のオブジェクト名を指定する。
例えば「/3 Miz Cremorne」と発言すれば、私のアバターのバウンディングボックスを見ることができる(10m以内に存在するものじゃないと駄目)。
半透明のキューブに以下のスクリプトを仕込み、チャンネル3で対象のオブジェクト名を指定する。
例えば「/3 Miz Cremorne」と発言すれば、私のアバターのバウンディングボックスを見ることができる(10m以内に存在するものじゃないと駄目)。
default {
state_entry() {
[[llListen]](3, "", [[llGetOwner]](), "");
}
listen(integer channel, string name, key id, string message) {
[[llSensor]](message, NULL_KEY, AGENT | ACTIVE | PASSIVE, 10, PI);
}
sensor(integer num_detected) {
list bb;
vector min;
vector max;
vector offset;
bb = llGetBoundingBox([[llDetectedKey]](0));
min = [[llList2Vector]](bb, 0);
max = llList2Vector(bb, 1);
offset = (min + max) / 2;
offset *= [[llDetectedRot]](0);
llSetText((string)min + "\n" + (string)max, <1, 1, 1>, 1.0);
llSetScale(-min + max);
llSetPos([[llDetectedPos]](0) + offset);
llSetRot(llDetectedRot(0));
}
}