Skip to content

ActionObjectについて

ActionObjectとは

ActionObjectは複数のアクション(アニメーション)を持つ 3Dオブジェクトの基底クラスです。3Dモデルファイルを読み込む GLTFクラスAcerola3Dクラスは、 このクラスを継承しています。

アクションは名前で管理されていて、getActionNames()で 一覧を取得できます。

モデルファイルの読み込みは非同期で行われるので、 await obj.readyで読み込み完了を待ってからシーンに追加します。

js
const obj = await new a3.GLTF('/a3js/assets/RobotExpressive.glb').ready;
console.log(obj.getActionNames()); // アクション名の一覧を表示
view.scene.add(obj);

StateとEmote

アクションの再生方法には2種類あります。

  • setState(name) — アクションをループ再生します。歩く・走る など、続けるアニメーションに使います。
  • setEmote(name) — アクションを一度だけ再生します。再生が 終わるとsetState()で設定していたアクションに自動的に戻ります。 ジャンプ・手を振るなど、一回きりの動作に使います。
js
obj.setState('Walking'); // 歩き続ける
obj.setEmote('Jump');    // 一度ジャンプして、歩きに戻る

以下のサンプルで動きを確認できます(3秒歩いた後にジャンプして、 また歩きに戻ります)。

js
import * as a3 from 'a3js';

const view = new a3.Window(600,300);
view.camera.setPosition(0,0,5);
const obj = await new a3.GLTF('/a3js/assets/RobotExpressive.glb').ready;
console.log(obj.getActionNames());
obj.setPosition(0,-2,0);
obj.setState('Walking');
view.scene.add(obj);

await a3.asyncSleep(3000);
obj.setEmote('Jump');

GLTFクラス

glTF形式(.glb/.gltf)の3Dモデルを読み込むクラスです。

Acerola3Dクラス

Acerola3D形式(.a3)のファイルを読み込むクラスです。

Action・Figure・Motion

ActionObjectが持つ1つ1つのアクションはActionクラスで 表されます。Actionは以下の2つをセットで管理しています。

  • Figure — 3Dモデルの形状(ルートのObject3Dとボーン・ スケルトン情報)。
  • Motion — モーション(アニメーション)。再生位置や終了リスナー などを持ちます。

アクションはgetAction(name)で取り出したり、removeAction(name)で 取り外したり、addAction(name, action)で別の名前で取り付けたり できます。

js
const action = obj.removeAction('Running');
obj.addAction('走る', action);
obj.setState('走る');

Motionの仕組みは、各種Jointなどを使った複雑な物理演算にも 利用できます。詳しくは 複雑な物理シミュレーションを参照してください。

また、移動速度に応じて止まる・歩く・走るのアクションを自動で 切り替える機能もあります。詳しくは 向きとアクションの自動制御を 参照してください。

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