Uploaded:2023/01/01 Latest-Update:2023/01/01

アドオン作成 - エンティティイベント(EntityEvent) 上級

目次は右上の「≡」から!
機能

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

EntityEventとはビヘイビアの「Animation」と「AnimationController」の総称です。 以下「EntityEvent」は「EntityEv」、「Animation」は「Anim」、 「AnimationController」は「AniCon(アニコン)」と略します。

ファイルの場所

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

ビヘイビア
  ┣ manifest.json
  ┣ pack_icon.png
  ┣ animations
  ┃ ┗〇〇.json
  ┗ animation_controllers
    ┗〇〇.json
AniConの基本事項

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

● 基本構造

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

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

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

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

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

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

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

"states": { ~#r"default": { %% "on_entry": [ %% // このstateに"入った"ときのイベント %% ], %% "transitions": [ %% // transition %% ], %% ~#b"on_exit": [ %%%% // このstateから"出ていく"ときのイベント %%%%]b#~ %%}r#~ }

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

"states": { ~#r"default": { // 1つ目のstate %% "on_entry": [ %% // このstateに"入った"ときのイベント %% ], %% "transitions": [ %% { "next_state": "(条件)" } // 行き先 %% ], %% "on_exit": [ %% // このstateから"出ていく"ときのイベント %% ] %%},r#~ ~#r"next_state": { // 次のstate %% ~#b"on_entry": [ %%%% // このstateに"入った"ときのイベント %%%%],b#~ %% "transitions": [ %% // transition %% ], %% "on_exit": [ %% // このstateから"出ていく"ときのイベント %% ] %%}r#~ }
AniConの詳細な書き方

● イベント

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

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

● transitions

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

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

● 1つのファイルで複数のAniConを書ける

{ "format_version": "1.18.10", "animation_controllers": { ~#b"controller.animation.ex1": { // AniCon1 %%%% "states": { %%%% // state %%%% } %%%%},b#~ ~#b"controller.animation.ex2": { // AniCon2 %%%% "states": { %%%% // state %%%% } %%%%}b#~ } }
Animの基本事項

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

● 基本構造

{ "format_version": "1.8.0", "animations": { "~#M(83ffd9)animation.test_eventsM#~": { // このAnimのID ~#r"timeline": { %%%%%% // タイムライン %%%%%%}r#~ } } }
Animの詳細な書き方

● タイムライン

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

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

● アニメーションの長さ

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

● 1つのファイルで複数のAnimを書ける

{ "format_version": "1.8.0", "animations": { ~#r"animation.ex1": { // Anim1 %%%% "timeline": { %%%% // タイムライン %%%% } %%%%},r#~ ~#r"animation.ex2": { // Anim2 %%%% "timeline": { %%%% // タイムライン %%%% } %%%%}r#~ } }
©2023 Rinca Hayamine