UE5) 스와이프 기능

스와이프 기능을 구연해보자

화면을 오른쪽이나 왼쪽으로 쓸었을 때 할 동작을 정의해본다.

구현 아이디어 : 터치가 시작된 지점과 터치가 끝난 지점의 좌표의 X값을 가지고 왼쪽으로 쓸었는지 오른쪽으로 쓸었는지 구분

위젯 내부 함수 오버라이드

스와이프를 인식할 위젯을 설정하고, 내부 함수를 덮어쓰자.

	virtual FReply NativeOnTouchStarted(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent) override;
	virtual FReply NativeOnTouchMoved(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent) override;
	virtual FReply NativeOnTouchEnded(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent) override;

터치가 시작되었을 때

FReply UMyWidget::NativeOnTouchStarted(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent)
{

	SwipeStartLoc = UKismetInputLibrary::PointerEvent_GetScreenSpacePosition(InGestureEvent);
	SwipeEndLoc = SwipeStartLoc;
	
	return FReply::Handled();
}

터치 시작 좌표를 저장하자.

터치가 끝났을 때

FReply UMyWidget::NativeOnTouchEnded(const FGeometry& InGeometry, const FPointerEvent& InGestureEvent)
{
	UE_LOGFMT(LogTemp,Warning,"NativeOnTouchEnded");
	SwipeEndLoc = UKismetInputLibrary::PointerEvent_GetScreenSpacePosition(InGestureEvent);
	auto delta = SwipeStartLoc - SwipeEndLoc;

	//왼쪽
	if(delta.X>0)
	{
		UE_LOGFMT(LogTemp,Warning,"왼쪽 스와이프 감지됨.");
	}
	//오른쪽
	else if(delta.X<0)
	{
		UE_LOGFMT(LogTemp,Warning,"오른쪽 스와이프 감지됨.");
	}

	
	return FReply::Handled();
}

터치 시작점과의 차이를 가지고 오른쪽 스와이프인지 왼쪽 스와이프인지 구분해서 처리하면 된다.

만약 꾹 누른체로 이동중일때 무엇인가 하고 싶다면, NativeOnTouchMoved 함수를 이용하면 된다.