Appearance
移動・回転・拡大縮小について
オブジェクトの移動・回転・拡大縮小の基本メソッドは以下の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ドキュメントを 参照してください。