언리얼 - 엔진 7 : 델리게이트, 이벤트 바인딩, input

김정환·2025년 4월 7일
0

Unreal Engine

목록 보기
8/24

이벤트 Event

  • 특정 사건이나 행위가 발생했을 때, 자동으로 관련 동작을 수행할 수 있도록 신호를 줄 수 있음.
  • 이를 통해서 입력 처리, api 호출 콜백 처리 등의 작업을 수행함.
  • 이벤트 중심 프로그래밍은 코드의 유연성과 모듈화를 높여줌.
    • Delegate, Event Binding 두 요소를 활용.

C++ 델리게이트 Delegate

  • 특정 이벤트나 동작 발생 시 호출할 함수를 미리 등록해두는 일종의 콜백 메커니즘.
    • C++ 함수 포인터와 비슷한 역할.
  • 다양한 시점에서 실행할 함수를 외부에서 설정할 수 있게 함.
  • 델리게이트를 이용하여 결합도를 낮추고 유연한 이벤트 처리를 가능하게 함.
  • 활용 예시
    • 캐릭터가 죽을 때, 사망 이벤트 발생 시 자동으로 처리함.
    • 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와의 상호작용을 쉽게 구현 가능.

다이나믹 델리게이트 공식 문서


언리얼 엔진 Enhanced Input System

  • 언리얼 엔진 5부터는 Enhanced InputSystem을 제공함.
  • 기존 입력 시스템을 확장해서 더 유연하고 강력한 입력 처리 기능을 제공.
    • 여러 입력 장치를 동시 지원
    • 복잡한 입력 패턴과 매핑을 보다 쉽게 처리할 수 있도록 설계
  • 입력 컨텍스트, 모듈화된 액션, 고급 입력 이벤트 등을 활용하여 게임플레이의 유연성을 향상시킴

1. 주요 특징

1-1. 입력 액션 Input Action

  • 다양한 입력 동작을 모듈화된 객체로 정의
    • 예를 들어, 점프라는 동작을 Jump 객체로 만들어서 정의하는 것
  • 이를 통해 키보드, 마우스 클릭, 게임 패드, 멀티터치 제스쳐와 같은 입력을 하나의 액션으로 처리

1-2. 입력 컨텍스트 Input Context

  • 게임의 특정 상황에서만 활성화되는 입력 매핑을 정의
  • 캐릭터가 조준 모드에 있을 때는 해당 입력만 처리하고, UI를 조작할 때는 다른 입력을 비활성화

1-3. 고급 입력 처리

  • Hold : 키를 일정 시간 이상 누르면 특정 행동이 트리거됨
  • Double Press : 더블 클릭을 감지해 동작을 수행
  • Combo Actions : 연속된 입력으로 콤보 공격 같은 복잡한 동작을 구현

1-4. 멀티 디바이스 입력 지원

  • 여러 입력 장치를 동시에 사용 가능
  • 예를 들어, 플레이어는 게임패드로 이동하면서 키보드로 추가 명령이 가능.

2. 구성요소

2-1. Input Action

  • 특정 입력 이벤트 (Press, Axis 등등)를 정의한 객체

주요 유형

  • 디지털 입력 : 버튼 클릭과 같은 이진 입력 처리
  • 축 입력 : 조이스틱이나 마우스 이동 같은 연속적인 값 처리

2-2. Input Mapping Context

  • 게임 모드나 상황에 맞는 입력 매핑을 정의
  • 예를 들어, UI 조작 모드와 게임플레이 모드에서 입력 처리를 다르게 설정 가능

2-3. Enhanced Player Input Component

  • 기존 PlayerInputComponent를 확장한 것이 Enhanced Player Input Component.
  • 다양한 입력 액션을 처리하며, 각 액션에 조건과 반응을 정의할 수 있음.
profile
만성피로 개발자

0개의 댓글