Object Motion & Controller

Introduction


モーションテンプレートの選択とパラメータ設定によって、オブジェクト・インスタンスを目標まで移動させる包括的機能について。

正式名称は ByName Object Motion And Controller ですが、通常は省略名として Object Motion Control 、本ドキュメントでは単純に Motion とも略されます。


ASTER :: Object Motion Control

Clickteam の公式「Movement」や、サードパーティー製の拡張機能である「Easing」など、簡単なパラメーター設定でオブジェクトを移動させる類似機能は複数ありますが、REGEX と JSON を組み合わせた拡張機能としての Motion & Controller は ASTER 独自のものです。

インスタンスをコントローラに登録する際、任意の識別子でグループ化する機能があり、名前を使ってグループに対して動作の停止、一時停止、再開、登録解除、インスタンスを破壊するなどの操作を行うことができます。


Clickteam :: Movement との比較

以下文章では ASTER :: Motion Controller の独自性について、Clickteam :: Movement との比較で説明していきます。

Image 1
Image 2

CF25 公式の登録モーションを使えばオブジェクトを簡単に自動移動させることができます。

Clickteam::Movement ではパラメータをインスタンス作成時に一律送信するため、オブジェクト・インスタンス毎に異なったパラメータや動きを付けるためには、CF25 公式の「モーションコントローラ」を拡張機能として別途インポートする必要があります。

アプリケーション実行中に、インスタンス毎の固有パラメータを細かく指定するためには Clickteam::Movement だとイベントの作成で非常に多くの手間がかかります。

ASTER はインスタンス作成時ではなく、事前に作成されたインスタンスに対してアプリケーションの実行中任意のタイミングでグループ化と、グループ単位で動作テンプレートの選択・パラメータの一括送信を行います。

Description of the image
動作テンプレートは「群」という概念が導入され、複数インスタンスをひとつの群れとして扱います。パラメータの送信も群に対して行われ、複数インスタンスがひとつの群れとして協調的に動くような自動計算が施されています。

登録可能オブジェクト・タイプ

ASTER :: Motion Controller に登録できるオブジェクトの種類は、アニメーション機能を持つアクティブ ( スプライト ) のみに限定されています。

Clickteam :: Movement はオブジェクトの種類を問わず、「背景」以外ほとんどの場合で動作を付けることができます。


フレームベース

ASTER はフレーム時間 ( FPS ) でのみ移動量を計算します。Clickteam :: Movement はタイムベースにも対応可能で、パラメータの設定時にもタイムベースで動かすための互換性が考慮されています。

ASTER は互換性を捨て、フレームベース動作に特化することで計算を単純化しています。


パラメータの文字列化とホットスワップ

ASTER は複数パラメータを文字列化し一括送信します。送信された文字列は内部で解析が行われ個別パラメータに分解されます。

文字列化されたパラメータは JSON のプリミティブ型である文字列型と完全な互換性があり、JSON 形式のファイルへ保存できます。

アプリケーション実行中に実動作を見ながらテキストエディタでパラメータを一部変更したら、アプリケーションを再起動するだけで新しいパラメータの読み込みが完了します。リビルドは不要で、部分的なパラメータ変更や試行錯誤・動作検証が迅速化します。


ASTER :: Motion .. 登録と制御

名前 ( Motion Group Name )は、モーションの登録と制御に使用します。

通常のワークフローとして ByName Motion Registration でモーション・グループをコントローラへ登録し、ByName Motion Controller は登録されたグループ名を介してインスタンスの制御を行います。

以下はコントローラにオブジェクトインスタンスを登録する標準的な手順を図示しています。

---
title: ByName Motion Registration
---
flowchart LR
  MOT(Select the Motion Template) --> A{Object}
  A{Object} --> NAME(Set Motion Group Name)
  NAME(Set Motion Group Name) --> PARAM(Motion Param)
  PARAM(Motion Param) --> B((Motion Controller))

グループ管理

ASTER の Object Control はモーション単位でグループ化したり、アプリケーション実行中にグループの登録や解除ができます。

ASTER の Object Control はインスタンスの重複登録を認めていないため、グループに登録できるインスタンスはコントローラーに未登録のインスタンスのみです。


予約変数

オブジェクト・インスタンスの持つインスタンス変数の一部を「予約変数」として拡張機能から利用します。

詳しい仕様については 「 Reserved Variables 」にて説明があります。

利用目的は

  1. 連番を自動割り振り

  2. 拡張機能内のデータベース検索を効率化

の二つ。


仕様:最大登録数
  • ASTERモーションコントローラは最大 255 のモーショングループを登録できます。

  • 各モーショングループには最大 255 のインスタンスを登録でき、理論的には最大で 255 * 255 = 65,025 のインスタンスをコントローラで管理できます。

しかし、これは理論上の上限であり、作者の考える実用性として 100 インスタンス程度が快適に動けば良くて、実際の動作テストも仕様の上限はまだ試していません。

100 インスタンスは控えめな数値だが、使用される PC のスペックやイベントの作り方によって上限は異なるため、大まかな目安として参考にしてください。


モーションテンプレート
  • Null
  • Horizontal Wrap | Flip
  • Horizontal Wrap | Flip :: Sinewave
  • Vertical Wrap | Flip
  • Vertical Wrap | Flip :: Sinewave
  • Orbital :: OwnXy
  • Orbital :: TargetXy
  • Movetowards
  • Movetowards :: Swap
  • Movetowards :: RefVec
Motion Template

動作が無い動作テンプレートが Null Motion です。グループ登録後の負荷が少なく、登録と解除を頻繁に行う前提設計にもなっています。具体的な利用方法は動作サンプルをご覧ください。

Wrap / Flip は指定範囲内を往復する動作テンプレートです。水平移動 ( Horizontal ) と 垂直移動 ( Vertical ) で大別され、Wrap | Flip と Wrap | Flip::Sinewave が派生型です。

Wrap は範囲外に接触した際、反対側にワープ出現します。Flip は範囲外に接触した場合、移動方向を反転します。SineWave は正弦波を模した動作。

円運動の中心座標をターゲットに依存する設計になっているため衛星軌道 ( Orbital ) を名乗っています。OwnXy は自座標を円運動の中心座標とする、TargetXy はターゲット指定されたオブジェクトインスタンス座標を周回します。TargetXy がターゲットを失うと自動的に OwnXy になります。OwnXy にターゲットを設定すると TargetXy になってターゲットを周回します。

Time-Bound 値に応じて制限時間内にインスタンスを目標地点まで移動させる動作テンプレート。

距離と時間に応じて移動量が求められます。

ペアを作りインスタンス同士の位置を入れ替える ( Swap ) は Movetowards の派生型動作です。


Attach behavior to the instance