アドオン詳細解説 - エンティティイベント

アップロード:2023/01/01 最終更新:2023/01/01

目次 (折りたたみ可)

機能

エンティティにタイムラインベースの詳細な処理を実装することができます。

エンティティイベントとは、ビヘイビアのアニメーションアニメーションコントローラの総称です。 このサイトでは、アニメーションコントローラのことを「アニコン」と呼びます。

ファイルの場所

ビヘイビアパックのainmationsフォルダ、またはanimaton_controllersフォルダにファイルを置きます。

ビヘイビア
  ┣ manifest.json
  ┣ pack_icon.png
  ┣ animations
  ┃ ┗ 〇〇.json
  ┗ animation_controllers
    ┗ 〇〇.json

アニコンの基本事項

各「state(ステート)」へ "入ったとき" と "出たとき" でそれぞれイベントを指定することができます。 また、イベント以外に「transition(トランジション)」という条件式が設定でき、 他のstateへ遷移するときにその条件を参照して異なるstateを行き先に指定できます。

基本構造

{ "format_version": "1.18.10", "animation_controllers": { "controller.animation.ex": { // このAniConのID "states": { "default": { // 1つのstate "on_entry": [ // このstateに"入った"ときのイベント ], "transitions": [ // transition ], "on_exit": [ // このstateから"出ていく"ときのイベント ] } } } } }
{ "format_version": "1.18.10", "animation_controllers": { "~#M(83ffd9)controller.animation.exM#~": { // このAniConのID "states": { ~#B(f00)"default": { // 1つのstate "on_entry": [ // このstateに"入った"ときのイベント ], "transitions": [ // transition ], "on_exit": [ // このstateから"出ていく"ときのイベント ] }B#~ } } } }

アニコンのしくみ

① 処理をはじめるとき、一番上に書かれたstateのon_entryが動作します(要検証)。

"states": { "default": { // stateその1 "on_entry": [ // このstateに"入った"ときのイベント ], "transitions": [ // transition ], "on_exit": [ // このstateから"出ていく"ときのイベント ] } }
"states": { ~#B(f00)"default": { // stateその1 ~#B(00f)"on_entry": [ // このstateに"入った"ときのイベント ],B#~ "transitions": [ // transition ], "on_exit": [ // このstateから"出ていく"ときのイベント ] }B#~ }

② 次にtransitionを処理していきます。上から順に処理するため、transitionの条件は厳しい順に上から並べる必要があります。

どの条件も満たさない場合は、また上から条件を比較して繰り返します。その間、次の処理へ移りません。

"states": { "default": { "on_entry": [ // このstateに"入った"ときのイベント ], "transitions": [ { "state1": "(条件)" }, // 条件が厳しい { "state2": "(条件)" }, { "state3": "(条件)" } // 条件が易しい ], "on_exit": [ // このstateから"出ていく"ときのイベント ] } }
"states": { ~#B(f00)"default": { "on_entry": [ // このstateに"入った"ときのイベント ], ~#B(00f)"transitions": [ { "state1": "(条件)" }, // 条件が厳しい { "state2": "(条件)" }, { "state3": "(条件)" } // 条件が易しい ],B#~ "on_exit": [ // このstateから"出ていく"ときのイベント ] }B#~ }

③ 次の行き先となるstateが決まったら最後にon_exitが動作します。

"states": { "default": { "on_entry": [ // このstateに"入った"ときのイベント ], "transitions": [ // transition ], "on_exit": [ // このstateから"出ていく"ときのイベント ] } }
"states": { ~#B(f00)"default": { "on_entry": [ // このstateに"入った"ときのイベント ], "transitions": [ // transition ], ~#B(00f)"on_exit": [ // このstateから"出ていく"ときのイベント ]B#~ }B#~ }

④ 行った先のstateでまたon_entryから処理が始まり、処理の順番に関しては以降同じように繰り返します。

"states": { "default": { // 1つ目のstate "on_entry": [ // このstateに"入った"ときのイベント ], "transitions": [ { "next_state": "(条件)" } // 行き先 ], "on_exit": [ // このstateから"出ていく"ときのイベント ] }, "next_state": { // 次のstate "on_entry": [ // このstateに"入った"ときのイベント ], "transitions": [ // transition ], "on_exit": [ // このstateから"出ていく"ときのイベント ] } }
"states": { ~#B(f00)"default": { // 1つ目のstate "on_entry": [ // このstateに"入った"ときのイベント ], "transitions": [ { "next_state": "(条件)" } // 行き先 ], "on_exit": [ // このstateから"出ていく"ときのイベント ] },B#~ ~#B(f00)"next_state": { // 次のstate ~#B(00f)"on_entry": [ // このstateに"入った"ときのイベント ],B#~ "transitions": [ // transition ], "on_exit": [ // このstateから"出ていく"ときのイベント ] }B#~ }

アニコンの詳細な書き方

イベント

"on_entry""on_exit"で発生させられるイベントは 具体的に、(紐づけたエンティティの)イベント、コマンドの実行、Molangの変数の初期化です。

"on_entry": [ "@s (イベント名)", // イベント; @s以外は存在しません "/say hello", // コマンドの実行; スラッシュ必須 "v.my_variable = 1.0;" // Molangの変数の初期化; セミコロン必須 ]

transitions

"transitions": [ { "(この条件で進むステートの名前)": "(Molang式で書かれた条件)" } ]
"transitions": [ ~#B(f00){ "(この条件で進むステートの名前)": "(Molang式で書かれた条件)" }B#~ ]

複数指定する場合は赤枠部分を増やします。

1つのファイルで複数のアニコンを書ける

{ "format_version": "1.18.10", "animation_controllers": { "controller.animation.ex1": { // AniCon1 "states": { // state } }, "controller.animation.ex2": { // AniCon2 "states": { // state } } } }
{ "format_version": "1.18.10", "animation_controllers": { ~#B(00f)"controller.animation.ex1": { // AniCon1 "states": { // state } },B#~ ~#B(00f)"controller.animation.ex2": { // AniCon2 "states": { // state } }B#~ } }

アニメーションの基本事項

タイムラインに沿って指定したイベントを実行します。 実行できるイベントはAniConと同じで、(紐づけたエンティティの)イベント、コマンドの実行、Molangの変数の初期化です。

基本構造

{ "format_version": "1.8.0", "animations": { "animation.test_events": { // このAnimのID "timeline": { // タイムライン } } } }
{ "format_version": "1.8.0", "animations": { "~#M(83ffd9)animation.test_eventsM#~": { // このAnimのID ~#B(f00)"timeline": { // タイムライン }B#~ } } }

アニメーションの詳細な書き方

タイムライン

プロパティ名に時間、値にイベントを書きます。

"timeline": { "0.0": "@s event", "1.0": [ // 複数のイベント "v.var1 = 1.0;", "v.var2 = 2.0;" ], "2.0": "/say hello" }
~#B(f00)"timeline": { "0.0": "@s event", "1.0": [ // 複数のイベント "v.var1 = 1.0;", "v.var2 = 2.0;" ], "2.0": "/say hello" }B#~

アニメーションの長さ

{ "format_version": "1.8.0", "animations": { "animation.test_events": { "timeline": { // タイムライン }, "animation_length": 5.0 } } }
{ "format_version": "1.8.0", "animations": { ~#B(f00)"animation.test_events": { "timeline": { // タイムライン }, ~#M(83ffd9)"animation_length": 5.0M#~ }B#~ } }

1つのファイルで複数のアニメーションを書ける

{ "format_version": "1.8.0", "animations": { "animation.ex1": { // Anim1 "timeline": { // タイムライン } }, "animation.ex2": { // Anim2 "timeline": { // タイムライン } } } }
{ "format_version": "1.8.0", "animations": { ~#B(f00)"animation.ex1": { // Anim1 "timeline": { // タイムライン } },B#~ ~#B(f00)"animation.ex2": { // Anim2 "timeline": { // タイムライン } }B#~ } }