Да уж, странно - DeprojectMousePositionToWorld почему-то неправильный результат выдаёт, хотя все советуют его использовать.
Сделал через GetHitResultUnderCursor - вроде заработало.
Рабочий вариант, может кому пригодится:
Код:
void ATest2PlayerController::RotateToMouseCursor(float Value)
{
if (Value != 0.0f) {
APawn* const MyPawn = GetPawn();
if (MyPawn) {
FHitResult Hit;
GetHitResultUnderCursor(ECC_Visibility, false, Hit);
if (Hit.bBlockingHit) {
FVector MouseWorldLocation = Hit.ImpactPoint;
MouseWorldLocation.Z = 0.0f;
FVector MyPawnLocation = MyPawn->GetActorLocation();
MyPawnLocation.Z = 0.0f;
FVector PawnToCursorDirection = MouseWorldLocation - MyPawnLocation;
PawnToCursorDirection.Normalize();
FVector PawnForwardDirection = MyPawn->GetActorForwardVector();
PawnForwardDirection.Normalize();
FVector Interpolation = FMath::VInterpTo(PawnForwardDirection, PawnToCursorDirection, GetWorld()->GetDeltaSeconds(), 50);
Interpolation.Normalize();
SetControlRotation(Interpolation.Rotation());
}
}
}
}