オブジェクトの自動移動

正式名称は ByName Object Motion And Control 、長すぎだから通常 ByName や And は省略されています。

CF25 公式の登録モーションを使えばオブジェクトを簡単に自動移動させることができます。 しかしオブジェクトに対して一括して同じパラメータを送信するため、インスタンス毎に異なったパラメータや動きを付けるためには「モーションコントローラ」を別拡張機能としてインポートする必要があり、パラメータの指定も手間が多くかかります。

Active Object::Properties::Movement


管理方法、Motion Group

オブジェクトの集合に名前を付けこれを「 Motion Group 」という単位で呼称します。

グループにつけられた名前が「 Motion Group Name 」です。


類似機能 :: Qualifier

Clickteam の標準機能として Frame Editor 上で設定できる Object Qualifier は概念的に近い機能です。

Clickteam :: The Object Qualifier

しかし Clickteam Object Qualifier はアプリケーション実行中にグループ化定義を新しく作ることはできず、オブジェクト単位で集合化するため同一オブジェクトから作成されたインスタンスを個別に識別し別グループへ分割登録することはできません。また Qualifier のタイプが異なればオブジェクトは複数の Qualifier に重複登録できます。



flowchart LR
    A{OBJECT A} --> B{Clickteam Qualifier}
    C[(OBJECT B)] --> B{Clickteam Qualifier}
    B{Clickteam Qualifier} --> D(A+B Group)

特徴 :: 仕様・制限

ASTER はアプリケーション実行中に名前で識別するグループを作り、グループ化の対象はアクティブオブジェクトのみ。



ASTER はモーションテンプレートを利用する前提のグループ化機能なので、モーションをコントロールすることに特化しています。



参考 : Reserved Variables

動作は全てフレームベースです。タイムベースでは正常に動作しない可能性があります。




登録に関する仕様

ASTER は同じグループ名の中に異なるオブジェクト ( 型 ) で作られたインスタンスを混在可能、別の名前であってもコントローラの内部で重複したインスタンスの登録は拒否しています。

Clickteam Qualifier と異なる点として、オブジェクト単位の登録ではなくインスタンス単位で登録する仕組みなので同一オブジェクトから作成されたインスタンスを別々の名前で登録可能です。

flowchart LR
    
    A{{OBJECT A.1}} -- orbital -->  B[(ASTER)]
    C{{OBJECT A.2}} -- sinewave -->  B[(ASTER)]
    B --> D(Left Group)
    B --> E(Right Group)
    subgraph Group.1
    D --> F[Orbital]
    end
    
    subgraph Group.0
    E --> G[Sinewave]
    end

    style A fill:#f9f,stroke:#333,stroke-width:1px
    style C fill:#33ECFF,stroke:#333,stroke-width:1px
    style D fill:#f9f,stroke:#333,stroke-width:1px
    style E fill:#33ECFF,stroke:#333,stroke-width:1px

同じ名前の中で異なるモーションテンプレートを選択し登録もできます。

flowchart LR

    A{{OBJECT A.1}} -- Orbital --> B[(ASTER)]
    C{{OBJECT A.2}} -- Sinewave --> B[(ASTER)]
    B[(ASTER)] --> D(A Group)
    style A fill:#f9f,stroke:#333,stroke-width:1px
    style C fill:#33ECFF,stroke:#333,stroke-width:1px
    style D fill:#97FF9D,stroke:#333,stroke-width:1px



    subgraph Group.0
    D((A Group)) --> F[Sinewave]
    D(A Group) --> E[Orbital]
    end

名前はモーションを必ずしも厳密に区別するためだけに利用されるわけではなく、モーションを混在させることもできます。複数あるインスタンスを名前で区別でき、用途に応じた名前を付けることもできます。


Motion 登録と制御

Motion の登録と制御には名前 ( Motion Group Name ) を利用します。

命令系統は ByName Motion Registration と ByName Motion Control の二つ、モーションをコントローラへ登録し、登録されたグループ名に対して制御を行うのが通常のワークフローとなります。

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

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 独自仕様となる文字列を使った一括送信方式です。

JSON 機能と親和性が高くなる設計になっていて、JSON からパラメータを直接読み込むことができます。

文字列化されたパラメータには型指定があり、Boolean、int、unsigned int、float を混在させることができます。

パラメータにはエラーチェックとフォーマットチェック機能があり、不正なパラメータ送信を事前に許可しない設計です。


グループ管理 :: 機能

ASTER の Object Control はモーション単位でグループ化し登録できる仕組みを持ち、アプリケーション実行中にグループの登録や解除ができます。登録インスタンスを個別にグループ登録から解除する機能もあります。

例えば登録を解除する Reject 機能だけで基本 4 種類。単純に登録を解除するだけでなくインスタンスを同時に破壊する命令を含んでいます。

  1. Reject ( ByName )
  2. Reject ( Directly )
  3. Reject + Destroy ( ByName )
  4. Reject + Destroy ( Directly )

Reject に関しては Null Motion を時間制限付きで登録する機能も合わせると全 5 種類です。

( ByName ) と ( Directly ) というのはデータベース検索手法の違いです。解除するインスタンスをデータベースから探す際に基本はグループ名を利用してもらいたいので ByName を、しかし実際の製作ではあらかじめ選択したインスタンスを個別に検索したい場合が多々あったので、検索効率が悪いけれどまずインターフェースを分けて Directly という派生命令を作って対応しました。

解除機能にトピックした説明が多くなりましたがその他にも機能はあります。

ベータ版に実装があった Virtual Wall は標準のテンプレートパラメータに設定が含まれているため正式版には現在実装がありません。




テンプレートモーション