センサーでペットをつくろう(llMoveToTarget,llRotLookAt関数)
前にご紹介したスクリプトTipsセンサーを使うの応用編です。
ペットをつくってみました。
オブジェクトTouchするとタッチしたアバターの近く(アバターからX軸に-0.5mY軸に-0.5mの場所)をついてまわります。
飛んでも、そばについてきます。
ライブラリの中に目玉を作るときのテクスチャがあったので、
これを利用して目玉のペットを作ることにしました。
下記のスクリプトを使います。
vector vpos;
default { touch_start(integer total_number) { vpos = llGetPos(); llSetStatus(STATUS_PHYSICS,TRUE); llSensorRepeat("", llDetectedKey(0), AGENT, 30, TWO_PI, 3.0); } sensor(integer total_number) { llMoveToTarget(llDetectedPos(0) + <-0.5,-0.5,0.0>, 0.2); llRotLookAt(llDetectedRot(0), 0.5, 0.5); } no_sensor() { llMoveToTarget(vpos, 0.2); llSensorRemove(); } } |
llMoveToTarget関数:llMoveToTarget(vector target, float tau)
一番目のパラメータ : 目標地点 二番目のパラメータ : 秒数 目標地点まで、指定秒数かけて移動します。(これで、Touchしたアバターの近くに移動です。) |
llRotLookAt関数:llRotLookAt(rotation target, float strength, float damping)
一番目のパラメータ : 目標回転 二番目のパラメータ : 強さ(物理オブジェクトの場合は、0.2から1.0) 三番目のパラメータ : 減衰(物理オブジェクトの場合は、0.2から1.0) 目標回転まで、指定秒数かけて移動します。(これで、Touchしたアバターと同じ方向を向きます。) |
llSensorRemove関数:llSensorRemove()
センサーを停止します。 |
no_sensorイベント
センサーに反応がないときのイベントです。 (Touchアバターがログオフやテレポートした場合、センサーを停止して元の場所に戻ります。) |
<補足>
SIMを超えての移動や、オブジェクトが入る許可のない土地には入れません。
その場合は、ペットが停止してしまいます。自分の土地で飼ってあげてください。
また、ペットの回転軸によってアバターとの向きがあわない場合は、llRotLookAtの行を
下記のようにXYZの回転度数を調整するといいかと思います。
(Z軸に90度回転させた例)
llRotLookAt(llDetectedRot(0) * llEuler2Rot(<0.0,0.0,90.0> * DEG_TO_RAD) ,0.5, 0.5);