メインコンテンツまでスキップ

APIリファレンス

GameEventシステムの完全なAPIリファレンスドキュメントです。すべてのイベント型は、イベント駆動アーキテクチャのための包括的な機能を備えた厳格な型安全インターフェースを実装しています。

名前空間

すべてのクラスとインターフェースはTinyGiants.GameEventSystem.Runtime名前空間に配置されています。

using TinyGiants.GameEventSystem.Runtime;

イベント型の概要

GameEventシステムは3つのイベント型バリアントを提供します

説明
GameEventシンプルな通知のためのパラメータなしイベント
GameEvent<T>型付きデータを渡すための単一引数イベント
GameEvent<TSender, TArgs>送信者を認識した通信のための二重引数イベント

以下のすべてのメソッドは、適切なパラメータのバリエーションを持ち、これらの型全体で使用できます。


🚀 イベントの発行とキャンセル

Raise()

イベントを即座にトリガーし、登録されたすべてのリスナーを実行順序で呼び出します。

実行順序: Basic → Priority → Conditional → Persistent → Triggers → Chains

void Raise();

使用例:

myEvent.Raise();
Cancel()

このイベントアセットに対して、Inspectorで設定されたアクティブなスケジュール実行(遅延または繰り返し)を停止します。

void Cancel();

使用例:

// Inspectorで設定された自動繰り返しを停止
myEvent.Cancel();
適用範囲の制限

これはInspectorの「スケジュール設定」によって開始されたスケジュールのみをキャンセルします。RaiseDelayed()またはRaiseRepeating()で作成された手動スケジュールはキャンセルされません。それらにはCancelDelayed(handle)またはCancelRepeating(handle)を使用してください。

⏱️ 時間ベースのスケジューリング

RaiseDelayed()

指定された遅延後に一度だけイベントを発行するようスケジュールします。

ScheduleHandle RaiseDelayed(float delay);

パラメータ:

名前説明
delayfloatイベント発行前の待機時間(秒)

戻り値: ScheduleHandle - キャンセル用のハンドル

使用例:

// 5秒後に発行
ScheduleHandle handle = myEvent.RaiseDelayed(5f);

// 必要に応じてキャンセル
myEvent.CancelDelayed(handle);
RaiseRepeating()

固定間隔でイベントを繰り返し発行するようスケジュールします。

ScheduleHandle RaiseRepeating(float interval, int repeatCount = -1);

パラメータ:

名前説明
intervalfloat各実行間の秒数
repeatCountint繰り返し回数。無限の場合は-1を使用(デフォルト: -1)

戻り値: ScheduleHandle - キャンセル用のハンドル

使用例:

// 10回繰り返し
ScheduleHandle handle = tickEvent.RaiseRepeating(1f, repeatCount: 10);

// 永久に繰り返し(無限ループ)
ScheduleHandle infinite = pulseEvent.RaiseRepeating(0.5f);

// 無限ループを停止
pulseEvent.CancelRepeating(infinite);
CancelDelayed()

RaiseDelayed()で作成された特定の遅延イベントをキャンセルします。

bool CancelDelayed(ScheduleHandle handle);

パラメータ:

名前説明
handleScheduleHandleRaiseDelayed()から返されたハンドル

戻り値: bool - 正常にキャンセルされた場合はtrue、既に実行済みまたは無効な場合はfalse

使用例:

ScheduleHandle handle = explosionEvent.RaiseDelayed(5f);

// 爆発が起こる前にキャンセル
if (explosionEvent.CancelDelayed(handle))
{
Debug.Log("爆発を解除しました!");
}
CancelRepeating()

RaiseRepeating()で作成された特定の繰り返しイベントをキャンセルします。

bool CancelRepeating(ScheduleHandle handle);

パラメータ:

名前説明
handleScheduleHandleRaiseRepeating()から返されたハンドル

戻り値: bool - 正常にキャンセルされた場合はtrue、既に終了済みまたは無効な場合はfalse

使用例:

ScheduleHandle handle = tickEvent.RaiseRepeating(1f);

// 繰り返しを停止
if (tickEvent.CancelRepeating(handle))
{
Debug.Log("タイマーを停止しました!");
}

🎧 リスナー管理

AddListener()

標準的な実行優先度を持つ基本リスナーを登録します。

void AddListener(UnityAction call);

パラメータ:

名前説明
callUnityActionパラメータなしのコールバックメソッド

使用例:

myEvent.AddListener(OnEventTriggered);

void OnEventTriggered()
{
Debug.Log("イベントが発行されました!");
}
重複防止

リスナーが既に存在する場合、重複を防ぐために削除されてから再追加されます。

RemoveListener()

イベントから基本リスナーの登録を解除します。

void RemoveListener(UnityAction call);

パラメータ:

名前説明
callUnityActionパラメータなしのコールバックメソッド

使用例:

myEvent.RemoveListener(OnEventTriggered);
RemoveAllListeners()

イベントからすべてのBasic、Priority、Conditionalリスナーをクリアします。

void RemoveAllListeners();

使用例:

// すべてのリスナーをクリーンアップ
myEvent.RemoveAllListeners();
適用範囲

安全上の理由から、Persistentリスナーやトリガー/チェーンイベントは削除されません

AddPriorityListener()

明示的な実行優先度を持つリスナーを登録します。優先度の値が高いほど先に実行されます。

void AddPriorityListener(UnityAction call, int priority);

パラメータ:

名前説明
callUnityActionコールバックメソッド
priorityint実行優先度(高い = 早い、デフォルト: 0)

使用例:

myEvent.AddPriorityListener(CriticalHandler, 100);
myEvent.AddPriorityListener(NormalHandler, 50);
myEvent.AddPriorityListener(LowPriorityHandler, 10);
// 実行順序: CriticalHandler → NormalHandler → LowPriorityHandler
RemovePriorityListener()

優先度リスナーの登録を解除します。

void RemovePriorityListener(UnityAction call);

パラメータ:

名前説明
callUnityActionパラメータなしのコールバックメソッド

使用例:

myEvent.RemovePriorityListener(OnEventTriggered);
AddConditionalListener()

条件がtrueと評価された場合にのみ実行されるリスナーを登録します。

void AddConditionalListener(UnityAction call, Func<bool> condition, int priority = 0);

パラメータ:

名前説明
callUnityActionコールバックメソッド
conditionFunc<bool>述語関数(null = 常に実行)
priorityint実行優先度(デフォルト: 0)

使用例:

myEvent.AddConditionalListener(
OnHealthLow,
() => playerHealth < 20,
priority: 10
);
RemoveConditionalListener()

条件付きリスナーの登録を解除します。

void RemoveConditionalListener(UnityAction call);

パラメータ:

名前説明
callUnityActionパラメータなしのコールバックメソッド

使用例:

myEvent.RemoveConditionalListener(OnEventTriggered);
AddPersistentListener()

シーン変更を超えて存続するグローバルリスナー(DontDestroyOnLoad)を登録します。

void AddPersistentListener(UnityAction call, int priority = 0);

パラメータ:

名前説明
callUnityActionコールバックメソッド
priorityint実行優先度(デフォルト: 0)

使用例:

globalEvent.AddPersistentListener(OnGlobalAction, priority: 100);
永続性

Persistentリスナーはシーンのロード間もアクティブなままです。セーブ管理や分析などのグローバルシステムに使用してください。

RemovePersistentListener()

永続的リスナーの登録を解除します。

void RemovePersistentListener(UnityAction call);

パラメータ:

名前説明
callUnityActionパラメータなしのコールバックメソッド

使用例:

myEvent.RemovePersistentListener(OnEventTriggered);

⚡ トリガーイベント(ファンアウトパターン)

AddTriggerEvent()

このイベントが発行されたときに自動的にトリガーされるターゲットイベントを登録します。

TriggerHandle AddTriggerEvent(
GameEventBase targetEvent,
float delay = 0f,
Func<bool> condition = null,
int priority = 0
);

パラメータ:

名前説明
targetEventGameEventBaseトリガーするイベント
delayfloatオプションの遅延(秒)(デフォルト: 0)
conditionFunc<bool>実行をゲートするオプションの述語
priorityint他のトリガーに対する実行順序(デフォルト: 0)

戻り値: TriggerHandle - 安全な削除のための一意の識別子

使用例:

// シンプルなトリガー: ドアが開く → ライトが点灯
doorOpenEvent.AddTriggerEvent(lightOnEvent);

// 遅延トリガー: 2秒後に爆発
fuseEvent.AddTriggerEvent(explosionEvent, delay: 2f);

// 条件付きトリガー
doorOpenEvent.AddTriggerEvent(
alarmEvent,
condition: () => isNightTime
);

// 優先順位付きトリガー
bossDefeatedEvent.AddTriggerEvent(stopMusicEvent, priority: 100);
bossDefeatedEvent.AddTriggerEvent(victoryMusicEvent, priority: 90);
bossDefeatedEvent.AddTriggerEvent(showRewardsEvent, priority: 50);
ファンアウトパターン

トリガーは並列に実行されます - 各トリガーは独立しています。1つのトリガーの条件が失敗したり例外をスローしても、他のトリガーは実行されます。

RemoveTriggerEvent() (ハンドルによる)

一意のハンドルを使用して特定のトリガーを安全に削除します。

void RemoveTriggerEvent(TriggerHandle handle);

パラメータ:

名前説明
handleTriggerHandleAddTriggerEvent()から返されたハンドル

使用例:

TriggerHandle handle = doorEvent.AddTriggerEvent(lightEvent);

// 特定のトリガーを削除
doorEvent.RemoveTriggerEvent(handle);
推奨

これは特定のトリガーインスタンスのみを削除するため、最も安全な削除方法です。

RemoveTriggerEvent() (ターゲットによる)

特定のターゲットイベントを指すトリガーをすべて削除します。

void RemoveTriggerEvent(GameEventBase targetEvent);

パラメータ:

名前説明
targetEventGameEventBase切断するターゲットイベント

使用例:

doorEvent.RemoveTriggerEvent(lightEvent);
広範囲への影響

これは、このイベントをターゲットとするすべてのトリガーを削除します。他のシステムによって登録されたものも含まれます。正確性のためにRemoveTriggerEvent(handle)を使用してください。

RemoveAllTriggerEvents()

このイベントからすべてのトリガーイベントを削除します。

void RemoveAllTriggerEvents();

使用例:

myEvent.RemoveAllTriggerEvents();

🔗 チェーンイベント(シーケンシャルパターン)

AddChainEvent()

チェーンで順次実行されるターゲットイベントを登録します。

ChainHandle AddChainEvent(
GameEventBase targetEvent,
float delay = 0f,
float duration = 0f,
Func<bool> condition = null,
bool waitForCompletion = false
);

パラメータ:

名前説明
targetEventGameEventBaseチェーンで実行するイベント
delayfloatこのノードを実行する前の遅延(デフォルト: 0)
durationfloatこのノードを実行した後の遅延(デフォルト: 0)
conditionFunc<bool>オプションの述語 - falseの場合チェーンが中断
waitForCompletionbool実行後に1フレーム待機(デフォルト: false)

戻り値: ChainHandle - 安全な削除のための一意の識別子

使用例:

// シンプルなシーケンス: A → B → C
eventA.AddChainEvent(eventB);
eventB.AddChainEvent(eventC);

// 遅延を伴うカットシーン
fadeOutEvent.AddChainEvent(loadSceneEvent, delay: 1f);
loadSceneEvent.AddChainEvent(fadeInEvent, delay: 0.5f);

// 条件付きチェーン: 条件が満たされた場合のみ続行
combatEndEvent.AddChainEvent(
victoryEvent,
condition: () => playerHealth > 0
);

// 非同期操作のためのフレーム待機付きチェーン
showDialogEvent.AddChainEvent(
typeTextEvent,
waitForCompletion: true
);
順次実行

チェーンは順次(A → B → C)実行されます。いずれかのノードの条件がfalseを返すか例外をスローした場合、チェーン全体がその時点で停止します。

トリガー vs チェーン
  • トリガー = 並列(A → [B, C, D]) - すべて独立して実行
  • チェーン = 順次(A → B → C) - 厳密な順序、失敗時に停止
RemoveChainEvent() (ハンドルによる)

一意のハンドルを使用して特定のチェーンノードを安全に削除します。

void RemoveChainEvent(ChainHandle handle);

パラメータ:

名前説明
handleChainHandleAddChainEvent()から返されたハンドル

使用例:

ChainHandle handle = eventA.AddChainEvent(eventB);

// 特定のチェーンノードを削除
eventA.RemoveChainEvent(handle);
RemoveChainEvent() (ターゲットによる)

特定のターゲットイベントを指すチェーンノードをすべて削除します。

void RemoveChainEvent(GameEventBase targetEvent);

パラメータ:

名前説明
targetEventGameEventBase切断するターゲットイベント

使用例:

eventA.RemoveChainEvent(eventB);
広範囲への影響

これは、このイベントをターゲットとするすべてのチェーンノードを削除します。正確性のためにRemoveChainEvent(handle)を使用してください。

RemoveAllChainEvents()

このイベントからすべてのチェーンイベントを削除します。

void RemoveAllChainEvents();

使用例:

myEvent.RemoveAllChainEvents();

🔧 設定とユーティリティ

SetInspectorListenersActive()

イベントが発行されたときにInspectorで設定されたリスナーを実行するかどうかを制御します。

void SetInspectorListenersActive(bool isActive);

パラメータ:

名前説明
isActiveboolInspectorリスナーを有効にする場合はtrue、ミュートする場合はfalse

使用例:

// Inspectorで設定されたUI/オーディオエフェクトをミュート
damageEvent.SetInspectorListenersActive(false);

// イベントはコードで登録されたリスナーのみをトリガー
damageEvent.Raise(10);

// Inspectorリスナーを再度有効化
damageEvent.SetInspectorListenersActive(true);

ユースケース:

  • カットシーン中に一時的にビジュアル/オーディオエフェクトを無音化
  • UI更新をトリガーせずにバックエンド計算を実行
  • ロード画面中にシーン固有の動作を無効化
  • テスト/デバッグモードでゲームロジックをシミュレート
適用範囲

この設定は、GameEventManagerを介してUnity Inspectorで設定されたリスナーにのみ影響します。コードでAddListener()を介して登録されたリスナーは影響を受けず、常に実行されます。


📊 クイックリファレンステーブル

メソッドカテゴリ

カテゴリメソッド目的
実行Raise(), Cancel()イベントのトリガーとスケジュール実行の停止
スケジューリングRaiseDelayed(), RaiseRepeating(), CancelDelayed(), CancelRepeating()時間ベースのイベント実行
基本リスナーAddListener(), RemoveListener(), RemoveAllListeners()標準的なコールバック登録
優先度リスナーAddPriorityListener(), RemovePriorityListener()順序付きコールバック実行
条件付きリスナーAddConditionalListener(), RemoveConditionalListener()ゲート付きコールバック実行
永続的リスナーAddPersistentListener(), RemovePersistentListener()シーン非依存のコールバック
トリガーイベントAddTriggerEvent(), RemoveTriggerEvent(), RemoveAllTriggerEvents()並列イベントチェーン
チェーンイベントAddChainEvent(), RemoveChainEvent(), RemoveAllChainEvents()順次イベントチェーン
設定SetInspectorListenersActive()ランタイム動作制御