Skip to content

移動・回転・拡大縮小について

オブジェクトの移動・回転・拡大縮小の基本メソッドは以下の3つです。

js
obj.setPosition(x,y,z); // 移動
obj.setRotation(x,y,z); // 回転(各軸の角度を度で指定)
obj.setScale(x,y,z);    // 拡大縮小

このほかにも便利なメソッドがあります。

  • lookAt(x,y,z) — 指定した位置の方を向きます。座標の代わりに Vec3やオブジェクトも渡せます。
  • moveForward(f)/moveRight(r)/moveUp(u)自分の向きを基準 にした前・右・上方向への相対移動です。
  • turnLeft(l)/turnUp(u)/rollRight(r) — 自分の向きを基準にした 相対回転(度)です。ヨー・ピッチ・ロールに対応します。飛行機の ような操縦はこれで書けます(使用例は フライトシミュレーターのサンプル)。

以下はsetRotation()setPosition()を毎フレーム更新して アニメーションさせるサンプルです。

js
import * as a3 from 'a3js';

const view = new a3.Window(600,300);
const obj = new a3.Box("blue");
view.scene.add(obj);

let t = 0;
while (true) {
  t += 2;
  obj.setRotation(0,t,0);
  obj.setPosition(2*Math.sin(t*Math.PI/180),0,0);
  await view.waitForRender();
}

モードによる効果の違い

同じsetPosition()でも、オブジェクトの モードによって効果が変わります。

  • Defaultモード — 指定した値が即座に反映されます。
  • Smoothモード — 指定した値へなめらかに補間しながら変化 します。
  • SimplePhysicsなどの物理系モード — 位置や回転は物理エンジンが 決めるので、setPosition()setRotation()効きません
  • Billboard/SmoothBillboardモード — 回転は自動制御されるので setRotation()は効きませんが、setPosition()は使えます。

Nowが付くメソッド

移動・回転系のメソッドには、setPositionNow()のようにNowが 付いたバージョンが用意されています。Nowが付いたメソッドは モードに関係なく、位置や回転を強制的に即座に変更します。

  • 物理系モードのオブジェクトを配置したり瞬間移動させたりするには Nowメソッドを使います。
js
ground.setMode('SimplePhysics',{rigidBody:'fixed'});
ground.setPositionNow(0,-3,0); // 床を配置
  • Smoothモードで「最初の配置だけは補間せず一瞬で終わらせたい」 ときにも使えます。

物理系モードのオブジェクトをNowメソッドで動かすときの注意点として、 移動先が他のコライダーにめり込んでいると、物理エンジンの貫通解消の 力で勢いよく弾き飛ばされることがあります。地面の上に配置するときは 少し浮かせた位置に置いて落とすのが安全です。

詳細はAPIドキュメントを 参照してください。