메인 콘텐츠로 건너뛰기

API 레퍼런스

GameEvent 시스템에 대한 완전한 API 레퍼런스 문서입니다. 모든 이벤트 타입은 이벤트 기반 아키텍처를 위한 포괄적인 기능을 갖춘 엄격한 타입 안전 인터페이스를 구현합니다.

네임스페이스

모든 클래스와 인터페이스는 TinyGiants.GameEventSystem.Runtime 네임스페이스에 위치합니다.

using TinyGiants.GameEventSystem.Runtime;

이벤트 타입 개요

GameEvent 시스템은 세 가지 이벤트 타입 변형을 제공합니다

타입설명
GameEvent간단한 알림을 위한 매개변수 없는 이벤트
GameEvent<T>타입이 지정된 데이터를 전달하는 단일 인수 이벤트
GameEvent<TSender, TArgs>sender를 인식하는 통신을 위한 이중 인수 이벤트

아래의 모든 메서드는 적절한 매개변수 변형과 함께 이러한 타입 전체에서 사용할 수 있습니다.


🚀 이벤트 발동 및 취소

Raise()

이벤트를 즉시 트리거하여 등록된 모든 리스너를 실행 순서대로 호출합니다.

실행 순서: 기본 → 우선순위 → 조건부 → 영구 → 트리거 → 체인

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()

이벤트에서 모든 기본, 우선순위 및 조건부 리스너를 지웁니다.

void RemoveAllListeners();

예시:

// 모든 리스너 정리
myEvent.RemoveAllListeners();
범위

안전상의 이유로 영구 리스너나 트리거/체인 이벤트는 제거하지 않습니다.

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);
영속성

영구 리스너는 씬 로드 전체에 걸쳐 활성 상태를 유지합니다. 저장 관리 또는 분석과 같은 글로벌 시스템에 사용하세요.

RemovePersistentListener()

영구 리스너의 등록을 해제합니다.

void RemovePersistentListener(UnityAction call);

매개변수:

이름타입설명
callUnityAction매개변수가 없는 콜백 메서드

예시:

myEvent.RemovePersistentListener(OnEventTriggered);

⚡ 트리거 이벤트 (Fan-Out 패턴)

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);
Fan-Out 패턴

트리거는 병렬로 실행됩니다 - 각 트리거는 독립적입니다. 한 트리거의 조건이 실패하거나 예외가 발생해도 다른 트리거는 여전히 실행됩니다.

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실행 후 한 프레임 대기 (기본값: 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()런타임 동작 제어