ソラマメブログ › 鳥頭の雑記帳 › 2010年05月15日

  

Posted by at

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は、ほとんどタイムラグが無いので割とスムーズに動きます。

アクセサリー製作をしている方には、かなり既知な事柄かも知れませんが、
私はしりませんでした。^^;
  


Posted by karasu blackburn at 20:24Comments(0)スクリプト