最終更新日 : 2024年03月25日
トリガー
EDEN Editorで使用するTriggerについて解説します
参考資料
Arma3 Community Wiki : Eden Editor: Trigger
Arma3 Community Wiki : Eden Editor: Trigger
[部分編集]
概要
Trigerとは
Trigegr(トリガー)とは、特定の条件が達成されたときにアクションを実行するための仮想エンティです。
トリガーは、以下のような処理を実行するために使用されます。
- ターゲットが破壊されたら、タスク成功とする
- トリガーのエリア内にプレイヤーが入ったら、メッセージを表示する
- 保護対象が破壊されたら、ミッション失敗とし、終了させる
例に上げたように、トリガーが発動することで、スクリプトを実行したり、モジュールを起動させたりすることができます。
[部分編集]
画面説明
Trigger: Init
Variable Name
変数名
英数字とアンダーラインのみが使用でき、大文字と小文字は区別されない。
英数字とアンダーラインのみが使用でき、大文字と小文字は区別されない。
Text
トリガーの説明
トリガーをラジオメニューとして追加した場合の表示名にもなる。
トリガーをラジオメニューとして追加した場合の表示名にもなる。
Trigger: Transformation
Position
メートル単位のワールド座標
Xは西から東への距離、Yは南から北への距離、Zは地上からの高さを示す。
Xは西から東への距離、Yは南から北への距離、Zは地上からの高さを示す。
Rotation
360度単位の回転。Xはピッチ、Yはロール、Zはヨー。
Size
メートル単位でのトリガーの領域
Shape
トリガーの形状
- Ellipse : 楕円形
- Rectangle : 長方形
Trigger: Activation
Type
トリガーのタイプ。アクティブ化時に「On Activation」以外の特別な動作を実行する。
- None
- 「On Activation」で実行されるスクリプトのみが実行される。
- Guarded by BLUFOR, Guarded by OPFOR, Guarded by Independent
- トリガーの位置と範囲が、指定した陣営の防衛エリアとなる。
- 「Guard」ウェイポイントを持つグループは、ミッション内の全ての防衛エリアを認識し、自らの距離と配置された順番で優先順位付けをする(最初に配置されたものが最優先となる)。
- Skip Waypoint
- トリガーがアクティブになると、同期されたウェイポイントが強制的にスキップされる。
- 自動で終了しない「Hold」や「Guard」ウェイポイントタイプなどに使用される。
- End #1, End #2, End #3, End #4, End #5, End #6
- 「成功」としてミッションを終了させる。
- Lose
- 「失敗」としてミッションを終了させます。
Activation
誰がまたは何がトリガーをアクティブにするのかを設定する。
一部のオプションは「Activation Type」での設定が必要。
一部のオプションは「Activation Type」での設定が必要。
- None
- デフォルトのアクティブ化なし。
- 「Condition」の条件式のみがトリガーをアクティブ化する。
- Any Player
- いずれかのプレーヤーが「Activation Condition」を満たしたときにアクティブになる。
- Anybody
- いずれかのオブジェクトやユニットが「Activation Condition」を満たしたときにアクティブになる。
- BLUFOR, OPFOR, Independent, Civilian, Game Logic
- 特定の陣営のオブジェクトやユニットが「Activation Condition」を満たしたときにアクティブになる。
- Seized by BLUFOR, Seized by OPFOR, Seized by Independent
- 指定された陣営がエリアを制圧しているときにアクティブ化される。
- Radio Alpha, Radio Bravo, Radio Charlie, Radio Delta, Radio Echo, Radio Foxtrot, Radio Golf, Radio Hotel, Radio India, Radio Juliet
- ラジオコマンドを使用してプレーヤーがアクティブ化(デフォルトキー"0-0"からアクセス)。
- トリガー「Text」がコマンドのタイトルとして使用される。
Activation Type
「Activation」条件のタイプ
- Present
- エリア内にオブジェクトが存在する場合、アクティブになる。
- Not Present
- エリア内からオブジェクトが存在しなくなった場合、アクティブになる。
- Detected by BLUFOR, Detected by OPFOR, Detected by Independent, Detected by Civilian
- オブジェクトがエリア内に存在し、指定された陣営によって発見されたときにアクティブになります。
Repeatable
繰り返しの許可
有効化すると同一のトリガーを何度も利用できるようになる。
有効化すると同一のトリガーを何度も利用できるようになる。
Server Only
有効にすると、トリガーはServerのみで実行される。
Trigger: Expression
Condition
トリガーをアクティブ化する条件。条件はブール値を返す処理のみが実行可能。trueの場合にトリガーが実行される。
- this
- 「Activation」条件のブール値
- thisList
- 「Activation」に基づいた、トリガー領域内のすべてのオブジェクトのリスト
- thisTrigger
- トリガーオブジェクトそのもの
On Activation
トリガーがアクティブになると実行される式。
- thisList
- 「Activation」に基づいた、トリガー領域内のすべてのオブジェクトのリスト
- thisTrigger
- トリガーオブジェクト
On Deactivation
トリガーが非アクティブ化されると実行される式。
- thisTrigger
- トリガーオブジェクト
Trigger: Timer
Timer Type
タイマーのタイプ
- Countdown
- 条件が満たされてから指定した時間が経過すると、トリガーがアクティブになる。
- Timeout
- 条件を満たした状態を指定した時間継続されると、トリガーがアクティブになる。
Timer Values
タイマー(秒)最小値, 中央値, 最大値
最小値から最大値までの範囲内からランダムで選択される。
選択される値は中央値に偏る。
最小値から最大値までの範囲内からランダムで選択される。
選択される値は中央値に偏る。
Trigger: Effects
Effect Condition
エフェクトが再生される条件
条件はブール値を返すものでなければならない
条件はブール値を返すものでなければならない
Sound
アクティブ化されたときに再生する音
Voice
トリガーをアクティベートした最初のユニットが発する声
Environment
アクティブ化されたときに再生する環境音
SFX
アクティブ化されたときに再生するSFX
トリガーがアクティブである限り、ループ再生される
トリガーがアクティブである限り、ループ再生される
Music
アクティブ化されたときに再生する音楽
現在再生されている音楽と置き換える
現在再生されている音楽と置き換える
UI Overlay
アクティブ化されたときに表示されるユーザーインターフェイスオーバーレイ。
[部分編集]
条件を作る - Trigger
重要なこと
isServer
トリガーの条件に使用される"isServer"は「サーバーのみがトリガーを検知し、On Activationの内容を実行する。」と考えてください。
例えば、敵兵を1人スポーンさせるスクリプトをisServerなしで実行したとします。
その場合、サーバーと各プレイヤーのPC上でトリガーが実行されるため
敵を1人スポーンさせるはずが、プレイヤーの総数+1人の敵兵がスポーンしてしまいます。
これは、トリガーがサーバーと各クライアントで実行されてしまったのが原因です。
hasInterface
hasinterfaceはクライアント上でのみ実行するための条件です。
文字の表示(hint)などはサーバー上で実行する必要がないため、hasInterfaceでクライアント上でのみスクリプトを実行させます。
文字の表示(hint)などはサーバー上で実行する必要がないため、hasInterfaceでクライアント上でのみスクリプトを実行させます。
AND
次の例では、条件1・条件2が共に真である場合に真となります。
<条件1> AND <条件2>
ANDは&&と表記することが可能です。
<条件1> && <条件2>
OR
次の例では、条件1・条件2のどちらかが真である場合に真となります。
<条件1> OR <条件2>
ORは||と表記することが可能です。
<条件1> || <条件2>
括弧
理論演算子(ANDやORなど)は四則演算のような優先順位がないので、全て左から順に処理されます。
優先順序を入れ替えるには括弧を使用します。
優先順序を入れ替えるには括弧を使用します。
例1. 条件1が真かつ、条件2または条件3が真ならば真となる。
<条件1> && (<条件2> || <条件3>)
例2. 条件1が真かつ条件2が真であるか、条件3が真ならば真となる。
(<条件1> && <条件2>) || <条件3>
[基本] ユニットの侵入判定
トリガーを初めて取り扱う場合の参考として
- プレイヤーユニットとしてのBLUFORの歩兵ユニットを設置
- EDEN Editorで範囲トリガーを任意の場所に設置
- トリガーの条件を次のように設定
- ミッションをプレイし、トリガー範囲に出入りしてみてください
Type : "None"
Activation : "BLUFOR"
Activation Type : "Present"
Repeatable : check
Condition : this
On Activation : hint "Hello, World!";
On Deactivation : hint "Good Bye!";
死亡・破壊判定
目標の死亡・破壊を検知 その1
!alive ユニット名
"alive"はユニットが生きていることを検知します。
よって、否定形の"!alive"はユニットが死亡することを検知します。
よって、否定形の"!alive"はユニットが死亡することを検知します。
応用
!alive driver 車両の変数名
これは車両ユニットのドライバーが死亡もしくは降車を検知します。
破壊が困難な車両に使用します。
"driver"を"gunner"にしても良いでしょう。
破壊が困難な車両に使用します。
"driver"を"gunner"にしても良いでしょう。
目標の死亡・破壊を検知 その2
({alive _x} count [<ユニット1>,<ユニット2>,…]) == 0
countを使用することで、複数目標の死亡・破壊をシンプルに検知することができます。
エリア制圧判定
敵陣営をOPFORとして解説する。
悪い例.
街を覆う範囲トリガーを作成して、次のように設定する。
Type : "None"
Activation : "OPFOR"
Activation Type : "Not Present"
Condition : this
この場合、範囲内のすべてのOPFORユニットが死亡・破壊された場合にトリガーが作動する。
この「すべての」が曲者であり、プレイヤーは範囲内のすべての建物や森に潜むOPFORユニットを捜索する必要が出てくる。
この「すべての」が曲者であり、プレイヤーは範囲内のすべての建物や森に潜むOPFORユニットを捜索する必要が出てくる。
良い例.
街を覆う範囲トリガーを作成して、次のように設定する。
Type : "None"
Activation : "Anybody"
Activation Type : "Present"
Condition : EAST countSide thislist < 5
この例では、範囲内のOPFORユニットが5人以下になったときに作動する。
こうすることで、プレイヤーがエリアの隅々まで捜索する必要性が少なくなります。
残ったAIは状況にもよりますが、登降させたりして処理しましょう。
こうすることで、プレイヤーがエリアの隅々まで捜索する必要性が少なくなります。
残ったAIは状況にもよりますが、登降させたりして処理しましょう。
On Activation : {if (side _x = EAST) then {[_x, true] call ACE_captives_fnc_setSurrendered;};} forEach thislist;
発見判定
敵AIがプレイヤー陣営ユニットを発見したときに動作するトリガー
次の例は、プレイヤー陣営がBULFORで敵陣営がOPFORの場合
次の例は、プレイヤー陣営がBULFORで敵陣営がOPFORの場合
Type : "None"
Activation : "BLUFOR"
Activation Type : "Detected by OPFOR"
Condition : this
[部分編集]
高度な内容
トリガーの判定間隔
トリガーはミッション中に0.5秒間隔でconditionの真偽を確認します。
つまり、大量のトリガーを設置することはあまり良い手段とは言えません。
つまり、大量のトリガーを設置することはあまり良い手段とは言えません。
これを回避するためには、トリガーだけでなくEventHandlerを使用することが推奨されます。
Arma 3: Event Handlers - Bohemia Interactive Community
Arma 3: Event Handlers - Bohemia Interactive Community
EventHandlerは動作が実行されたときのみ処理されます。
短絡評価
トリガーのConditionが以下の場合、<条件1>と<条件2>が共に真であるかが確認されます。
<条件1> && <条件2>
これを次のように書き換えることで、<条件1>が真でない場合は<条件2>をスキップできます。
<条件1> && {<条件2>}
つまり、左辺が偽である場合は右辺の評価が行われないということです。
ただし、短絡評価が常に最善であるかどうかは保証できません。
ただし、短絡評価が常に最善であるかどうかは保証できません。
添付ファイル