이전 글에서 다룬 트레이스를 이용해서 시선 방향에 위치한 액터를 가져오는 것까지 성공했다. 이제는 특정 키를 눌러서 그 액터에 Grab 동작을 수행해 보고자 한다.
이와 관련해서 Enhanced Input 개념, InputAction과 InputMappingContext가 사용되는데, 이전에 다룬 적이 있으므로, 간단히만 짚고 넘어가도록 한다.
먼저 'IA_Grab' 인풋액션을 생성한다. 'F' 키를 이용해서 상호작용하도록 할 것이며, 간단한 키 입력이므로 Digital(Bool) 값을 지정한다.
IMC에서 인풋액션의 키를 F로 설정해 주었다.
UFUNCTION(BlueprintCallable)
void Grab();
Grabber 클래스에 위와 같이 Grab 함수를 만든다. UFUNCTION(BlueprintCallable)
로 선언해 줌으로써 블루프린트 환경에 사용할 수 있도록 노출시킬 수 있다.
그리고 아래와 같이 간단히 "Grab" 만을 출력하도록 정의한다.
void UGrabber::Grab()
{
UE_LOG(LogTemp, Display, TEXT("Grab"));
}
그리고 Player 블루프린트에서 Grabber 인스턴스를 가져오고 이 Grabber에서 Grab 함수를 호출한다. 이렇게 해야하는 이유가 Grabber 컴포넌트 안에 정의되어 있는 함수이기 때문이다.
컴파일 후 실행해보면 아래 그림과 같이 Grab이 잘 출력되고 있음을 알 수 있고, 즉 C++로 정의한 함수가 블루프린트 노드들에 의해 잘 호출되고 있음을 알 수 있다.