llGetVel
vector llGetVel()
オブジェクトの速度(m/s)を得る。
戻り値はvectorであるので、当然ながらオブジェクトが移動している方向を知ることも可能である。
戻り値はvectorであるので、当然ながらオブジェクトが移動している方向を知ることも可能である。
単純にオブジェクトの速度を得たいなら、
float speed = llVecMag(llGetVel());
とすると純粋な速度(m/s)がfloat型で得られる。
llVecMag関数はvectorの長さを得る関数。
llVecMag関数はvectorの長さを得る関数。
オブジェクトの移動方向を知りたいなら、
vector normal = llVecNorm(llGetVel());
このようにすると長さ1mのvectorを得ることができる。
長さ1mのvectorのことを単位ベクトルと言い、何かと便利な代物である。
長さ1mのvectorのことを単位ベクトルと言い、何かと便利な代物である。
何が便利かって、例えば、オブジェクトの進行方向5m先の座標を得たいと思ったら、
vector pos = llGetPos() + llVecNorm(llGetVel()) * 5.0;
単位ベクトルは1mなので、5倍すれば5mの長さになる。
これを現在位置に足してやれば、進行方向5m先の座標になる。
これを現在位置に足してやれば、進行方向5m先の座標になる。
なお、オブジェクトの速度は一定ではないので注意。
SLの世界には重力も働いているし、生意気にもエネルギーの概念があるため、永久に同じ速度で動き続けるオブジェクトは基本的には存在しない。
SLの世界には重力も働いているし、生意気にもエネルギーの概念があるため、永久に同じ速度で動き続けるオブジェクトは基本的には存在しない。