Skip to content

AvatarVelocityControllerクラス

a3.AvatarVelocityControllerは、キーボードでアバター (キャラクター)を操作するコントローラーです。キー操作は AvatarPositionControllerクラスと 同じです。

  • W/A/S/D — 前後左右に移動します。
  • ←→ 矢印キー — 左右に回転します。
  • Space — ジャンプします。

こちらはsetLinearVelocity()で速度を指定する方式のため、 周囲の剛体と物理的に相互作用できる(箱を押せる・押される)のが 特徴です。DynamicCharacterモードの アバターと組み合わせて使います。接地判定は AvatarPositionControllerより不正確なので、安定した接地判定が 必要な場合はそちらを使ってください。

js
view.setController(new a3.AvatarVelocityController(player));

生成オプション

第2引数でオプションを指定できます。

  • speed — 移動速度(m/秒)。デフォルトは5.0
  • angSpeed — 回転速度(ラジアン/フレーム)。デフォルトは0.3
  • jumpSpeed — ジャンプ速度(m/秒)。デフォルトは15.0

サンプル

DynamicCharacterモードのロボットをW/A/S/Dキーで動かすサンプル です。赤い箱(dynamicな剛体)を押せることを確認してください (キーが効かないときは一度3D表示部分をクリックしてください)。

js
import * as a3 from 'a3js';

await a3.initPhysics();
const view = new a3.Window(600,300);

const ground = await new a3.GLTF('/a3js/assets/grass-ground2.glb').ready;
ground.setMode('SimplePhysics',{meshCollider:'tri_mesh',rigidBody:'fixed'});
view.scene.add(ground);

const player = await new a3.GLTF('/a3js/assets/RobotExpressive.glb').ready;
player.setScale(0.5,0.5,0.5);
player.setMode('DynamicCharacter');
player.setPosition(0,2,0);
// 速度に応じてアクションを自動切り替え(このモデルのアクション名に合わせる)
player.haltActionName = 'Idle';
player.walkActionName = 'Walking';
player.runActionName = 'Running';
player.setState('Idle');
player.setAutoAction(true);
view.scene.add(player);

// W/A/S/Dで移動、←→で回転、Spaceでジャンプ
// (キーが効かないときは一度3D表示部分をクリック)
view.setController(new a3.AvatarVelocityController(player));
view.camera.setMode('Follow',{target:player,lookFrom:{x:0,y:2,z:-4}});

// ぶつかると押せる箱(dynamic)
const box = new a3.Box('red');
box.setMode('SimplePhysics');
box.setPositionNow(0,1,3);
view.scene.add(box);

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