アドオン作成 - エンティティイベント(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#~
}
}