이벤트 Event
- 특정 사건이나 행위가 발생했을 때, 자동으로 관련 동작을 수행할 수 있도록 신호를 줄 수 있음.
- 이를 통해서 입력 처리, api 호출 콜백 처리 등의 작업을 수행함.
- 이벤트 중심 프로그래밍은 코드의 유연성과 모듈화를 높여줌.
- Delegate, Event Binding 두 요소를 활용.
C++ 델리게이트 Delegate
- 특정 이벤트나 동작 발생 시 호출할 함수를 미리 등록해두는 일종의 콜백 메커니즘.
- 다양한 시점에서 실행할 함수를 외부에서 설정할 수 있게 함.
- 델리게이트를 이용하여 결합도를 낮추고 유연한 이벤트 처리를 가능하게 함.
- 활용 예시
- 캐릭터가 죽을 때, 사망 이벤트 발생 시 자동으로 처리함.
- UI 버튼 클릭 시, UI 업데이트나 새로운 기능 실행.
주요 유형
1. 일반 델리게이트
- 하나의 함수만 등록하고 호출함.
- 간단한 이벤트 처리에 유용.
2. 멀티캐스트 델리게이트
- 여러 개의 함수를 한 번에 바인딩할 수 있음.
- 하나의 이벤트에 다양한 반응이 필요한 경우 유용
3. 동적 델리게이트
- 런타임에 바인딩하거나 해제할 수 있음.
- BP와 상호작용이 필요할 때 사용.
사용 예시
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnCharacterDeath);
class AMyCharacter : public ACharacter
{
GENERATED_BODY()
public:
FOnCharacterDeath OnCharacterDeath;
void Die()
{
OnCharacterDeath.Broadcast();
}
};
이벤트 바인딩 Event Binding
- 특정 이벤트가 발생할 때마다 호출할 함수를 델리게이트에 연결하는 과정.
- 이를 통해서 이벤트 발생 시 미리 바인딩된 함수가 자동으로 호출됨.
void AMyGameMode::BeginPlay()
{
Super::BeginPlay();
MyCharacter->OnCharacterDeath.AddDynamic(this, &AMyGameMode::HandleCharacterDeath);
}
void AMyGameMode::HandleCharacterDeath()
{
UE_LOG(LogTemp, Warning, TEXT("캐릭터가 죽었습니다!"));
}
주요 메서드
AddDynamic()
: 런타임 중에 동적으로 함수를 델리게이트에 바인딩함.
Broadcast()
: 바인딩된 모든 함수를 호출.
정리
- 델리게이트와 이벤트 바인딩의 장점
- 유연한 이벤트 처리 : 여러 함수들을 런타임 중에 자유롭게 바인딩하거나 해제 가능.
- 모듈화된 코드 : 이벤트와 동작을 분리해 코드의 가독성과 유지보수성을 높임.
- BP와 통합 : 동적 델리게이트를 활용해 BP와의 상호작용을 쉽게 구현 가능.
다이나믹 델리게이트 공식 문서
- 언리얼 엔진 5부터는 Enhanced InputSystem을 제공함.
- 기존 입력 시스템을 확장해서 더 유연하고 강력한 입력 처리 기능을 제공.
- 여러 입력 장치를 동시 지원
- 복잡한 입력 패턴과 매핑을 보다 쉽게 처리할 수 있도록 설계
- 입력 컨텍스트, 모듈화된 액션, 고급 입력 이벤트 등을 활용하여 게임플레이의 유연성을 향상시킴
1. 주요 특징
- 다양한 입력 동작을 모듈화된 객체로 정의
- 예를 들어, 점프라는 동작을 Jump 객체로 만들어서 정의하는 것
- 이를 통해 키보드, 마우스 클릭, 게임 패드, 멀티터치 제스쳐와 같은 입력을 하나의 액션으로 처리
1-2. 입력 컨텍스트 Input Context
- 게임의 특정 상황에서만 활성화되는 입력 매핑을 정의
- 캐릭터가 조준 모드에 있을 때는 해당 입력만 처리하고, UI를 조작할 때는 다른 입력을 비활성화
1-3. 고급 입력 처리
Hold
: 키를 일정 시간 이상 누르면 특정 행동이 트리거됨
Double Press
: 더블 클릭을 감지해 동작을 수행
Combo Actions
: 연속된 입력으로 콤보 공격 같은 복잡한 동작을 구현
1-4. 멀티 디바이스 입력 지원
- 여러 입력 장치를 동시에 사용 가능
- 예를 들어, 플레이어는 게임패드로 이동하면서 키보드로 추가 명령이 가능.
2. 구성요소
- 특정 입력 이벤트 (Press, Axis 등등)를 정의한 객체
주요 유형
- 디지털 입력 : 버튼 클릭과 같은 이진 입력 처리
- 축 입력 : 조이스틱이나 마우스 이동 같은 연속적인 값 처리
2-2. Input Mapping Context
- 게임 모드나 상황에 맞는 입력 매핑을 정의
- 예를 들어, UI 조작 모드와 게임플레이 모드에서 입력 처리를 다르게 설정 가능
- 기존
PlayerInputComponent
를 확장한 것이 Enhanced Player Input Component
.
- 다양한 입력 액션을 처리하며, 각 액션에 조건과 반응을 정의할 수 있음.