에디터에서 키와 액션을 묶고 → 블루프린트에서 그 액션을 변수에 끼우고 → 코드에서 그 변수가 눌리면 함수를 부르도록 연결하고 → 함수가 실제 동작을 실행한다.

 

1. 헤더에 입력 변수 선언

가장 먼저 코드 쪽에 E키 입력을 담을 걸 만든다

UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
UInputAction* InteractAction;

 

 

2. 처리할 함수 선언

E키가 눌렸을 때 실행할 함수를 미리 선언해둔다

void Interact();

 

3. 에디터에서 Input Action 에셋 생성

콘텐츠 브라우저에서 우클릭 → Input → Input Action으로 IA_Interact를 만든다.

Value Type은 Digital(bool)로 지정한다. (방향값이 필요 없고 눌렸다/안눌렸다만 필요하기 때문)

 

4. Input Mapping Context(IMC)에 키 연결

IMC_Default를 열고 Mapping을 추가해서 Action에 IA_Interact를 지정하고 키는 E로 매핑한다.

 

5. 캐릭터 블루프린트에서 변수에 에셋 연결

Details 패널에서 InteractAction 슬롯에 IA_Interact를 드래그해서 끼운다

(1번과 3,4번이 연결된 것)

 

6. cpp에서 입력과 함수를 바인딩

SetupPlayerInputComponent 안에서 바인딩한다.

EnhancedInputComponent->BindAction(InteractAction, ETriggerEvent::Started, this, &ATheRoomCharacter::Interact);

 

이 코드는 "E키가 눌리는 순간(Started) Interact()를 실행해라"는 뜻이다

 

7. 함수 몸체 구현

void ATheRoomCharacter::Interact()
{
    if (CurrentInteractable)
    {
        CurrentInteractable->ActivateItem(this);
    }
}

 

 

원래 이런 입력 처리는 PlayerController에 구현하는 게 일반적이지만 이번 프로젝트에서 주어진 캐릭터 템플릿은 입력이 캐릭터 클래스 안에 구현되어 있어서 그 구조를 따라갔다

 

+ Recent posts