BlackSheep-LSL@Wiki llApplyImpulse
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

llApplyImpulse

llApplyImpulse(vector force, integer local)

物理オブジェクトに瞬間的な力を加える。
力の方向及び強さは引数forceで指定する。
引数localがTRUEの場合、forceはオブジェクトのローカル軸に対して働き、FALSEの場合はグローバル座標に対して働く。

物理オブジェクトに力を加える関数としては、大別してこのllApplyImpulse関数とllSetForce?関数の二つがある。
この二種類の関数の違いは、加える力が瞬間的か恒久的かの違いである。

インパルス系の関数は、瞬間的な力である。
例えばゴルフボールをグラブで引っぱたいたような場合、ボールに加えられる力は瞬間的なものであって、その後ボールは徐々にエネルギーを失い、落下する。
フォース系の関数は恒久的な力である。
ロケットの推進力のように、常に加速を加えるような場合にはフォース系関数を使う。

言い換えるなら、インパルス系の関数とは、オブジェクトのエネルギーを消費する関数である。
エネルギーがあれば効果を発揮するが、エネルギーがなくなると効果がなくなる。

セカンドライフにおけるエネルギーは、時間によって回復するという特性がある。
インパルス系の関数を使ってオブジェクトを動かした場合、オブジェクトはエネルギーを消費するが、エネルギーがゼロになるとそれ以上インパルス系の関数を使って動かすことができなくなる。
しばらく待つと、エネルギーが回復して動くようになるのだが、一度引っぱたいたゴルフボールが落下した後、すぐに引っぱたいても動かないという事態があり得るので注意する必要がある。

オブジェクトのエネルギーを調べるにはllGetEnergy関数を使う。
エネルギーの値は1.0~0.0で、1.0ならインパルス系関数の効果は100%発動するが、0.0だとまったく発動しない。

なお、llApplyImpulse関数はアタッチメントにおいても使うことができる。

オブジェクトを特定の速度で動かすには、オブジェクトの質量を考慮する必要がある。
質量の大きなオブジェクトほど、大きな力を加えないと動かない。
さらには重力の影響もあるので注意すること。
セカンドライフにおける物理オブジェクトは、常にマイナスZ方向(下方向)に向かって秒速9.8mの重力が加わっている。

以下の例はオブジェクトを秒速10mの速度で上空に打ち上げる。

llApplyImpulse(llGetMass()*<0,0,10>,FALSE);

以下の例はオブジェクトにブレーキをかける(オブジェクトに加わっている力と正反対の力を加える)。

llApplyImpulse(-llGetMass()*llGetVel(),FALSE);

なお、オブジェクトに加えることのできるインパルスの最大パワーは20,000である。
20,000以上の力を加えても、20,000の力までしか効果がない。
ここで言う20,000とは、引数forceに与えるベクトルの長さである。

瞬間的な回転力を与えるにはllApplyRotationalImpulseを参照。