구글링해도 안나와서 UUserWidget클래스를 참고했다

 

블루프린트에서 제목에 있는 함수들을 사용하려면 함수탭에서 오버라이드를 눌러서 만들면 된다.

이걸 C++로 옮기고 싶어서 시도해봤는데 OnTouch~()의 함수원형은 이렇게 생겼다

/**
	 * Called when a touchpad touch is ended (finger lifted)
	 * 
	 * @param MyGeometry    The geometry of the widget receiving the event.
	 * @param InTouchEvent	The touch event generated
	 */
UFUNCTION(BlueprintImplementableEvent, BlueprintCosmetic, Category="Touch Input")
FEventReply OnTouchEnded(FGeometry MyGeometry, const FPointerEvent& InTouchEvent);

보아하니 BluprintImplementableEvent로 인해 블루프린트에서 오버라이드를 할 수는 있지만

가상함수(virtual)가 아니라서 c++에서는 오버라이드가 불가능하다.

 

쫌~더 알아보니까 이런함수가 있더라

virtual FReply NativeOnTouchEnded( const FGeometry& InGeometry, const FPointerEvent& InGestureEvent );
FReply UUserWidget::NativeOnTouchEnded( const FGeometry& InGeometry, const FPointerEvent& InGestureEvent )
{
	return OnTouchEnded( InGeometry, InGestureEvent ).NativeReply;
}

같은 OnTouchEnded지만 다른점은 함수명앞에 Native가 붙고, 리턴값이 조금다르고 내가 원하던 가상함수다.

 

고대로 이 함수를 오버라이드를 해보니 잘 작동된다.

오버라이드 결과물

FReply OnTouchMoved( const FGeometry& InGeometry, const FPointerEvent& InGestureEvent ) override;
FReply UMy_UI::OnTouchMoved( const FGeometry& InGeometry, const FPointerEvent& InGestureEvent )
{
	Super::OnTouchMoved(InGeometry, InGestureEvent);
    
    //FReply::Unhandled();
    return FReply::Handled();
}

 

+ Recent posts