
2010年05月15日
アタッチオブジェクトの移動について

スクリプトの製作依頼で、気がついたことを備忘録として記述しておきます。
アタッチオブジェクトを位置移動させるときに、短い移動距離だと
llSetPosで指定しても、うまく動かなかったり、何回も実行すると
大きく移動したりします。
これは、SLのバグに起因している。(再描画がうまく実行されないのが原因)
このため、このバグを回避するためには、以下の方法を利用するとよい。
まず、移動命令をするまえにオブジェクト自体の大きさを変更します。
で、移動させて、元の大きさに戻す。
コードにすると
// 元のサイズを記憶
vector vctScale = llGetScale();
// 現在の場所を記憶
vector vctPos = llGetLocalPos();
// 人の目では認識できないぐらいの誤差で大きさを変更
llSetScale(vctScale + <0.00001, 0.0, 0.0>);
// 場所を移動(この場合は、Z方向に移動)
llSetPos(vctPos + <0.0, 0.0, 0.001>);
// 元の大きさに戻す
llSetScale(vctScale);
llSetScaleは、ほとんどタイムラグが無いので割とスムーズに動きます。
アクセサリー製作をしている方には、かなり既知な事柄かも知れませんが、
私はしりませんでした。^^;