UE5/UE5 기초

UE5기초)마우스 클릭 이동

PJNull 2023. 6. 13. 16:18
728x90
반응형

※이전 포스팅에서는 Input관련함수들을 캐릭터에 구현했지만 Unreal에서는 Input관련 함수들은 Controller에 구현하는 것이 권장된다.  

 

마우스 클릭이동 블루프린트

먼저 Picking을 이용하여 

 

IMC에서 인풋을 바꾼 다음 Controller에서 인풋을 설정해준다.

 

 

마우스 클릭이동 C++

 

먼저 IMC의 Subsystem을 설정한후

{
	Super::BeginPlay();

	auto* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(GetLocalPlayer());

	if (Subsystem)
	{
		Subsystem->AddMappingContext(InputMappingContext, 0);

	}
}

 

바인딩해준다.

{
	Super::SetupInputComponent();
	UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(InputComponent);

	if (EnhancedInputComponent)
	{
		EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Started, this, &AR1PlayerController::IA_MOVE_Start);
		EnhancedInputComponent->BindAction(TurnAction, ETriggerEvent::Completed, this, &AR1PlayerController::IA_MOVE_Complete);
	}
}
void AR1PlayerController::IA_MOVE_Start(const FInputActionValue& Value)
{
	bMouseActionEnabled = true;
}
void AR1PlayerController::IA_MOVE_Complete(const FInputActionValue& Value)
{
	bMouseActionEnabled = false;
}

 

IMC바인딩이 끝나면 Picking을 통해 위치를 AddMovemnetInput에 전해준다.

if (bMouseActionEnabled==true)
	{
		FVector Location = GetPawn()->GetActorLocation();
		FHitResult HitResult;
		GetHitResultUnderCursorByChannel(ETraceTypeQuery::TraceTypeQuery1,true,OUT HitResult);
		
		FVector MouseLocation = HitResult.Location;
		
		FVector MoveDir = UKismetMathLibrary::GetDirectionUnitVector(Location, MouseLocation);

		APawn* pawn = GetPawn();
		if (pawn)
		{
			pawn->AddMovementInput(MoveDir);
		}
	}

 

 

 

 

728x90
반응형