Новая версия:
Код:
void ATest2PlayerController::RotateToMouseCursor(float Value)
{
if (Value != 0.0f) {
APawn* const MyPawn = GetPawn();
if (MyPawn) {
FVector MouseWorldLocation, MouseWorldDirection;
DeprojectMousePositionToWorld(MouseWorldLocation, MouseWorldDirection);
MouseWorldLocation.Z = 0.0f;
FVector MyPawnLocation = MyPawn->GetActorLocation();
MyPawnLocation.Z = 0.0f;
FVector PawnToCursorDirection = MouseWorldLocation - MyPawnLocation;
PawnToCursorDirection.Normalize();
FVector PawnForwardDirection = MyPawn->GetActorForwardVector();
FVector Interpolation = FMath::VInterpTo(PawnForwardDirection, PawnToCursorDirection, GetWorld()->GetDeltaSeconds(), 50);
float AimAtAngle = FMath::RadiansToDegrees(acosf(FVector::DotProduct(PawnForwardDirection, PawnToCursorDirection)));
//SetControlRotation(Interpolation.Rotation());
SetControlRotation(FRotator(0.f, AimAtAngle, 0.f));
}
}
}
За мышью попрежнему не следит. Поворачивается на определённый угол и всё.
Что-то не так с координатами - вот логи после того как чар повернулся и курсор указывает под него:
Val: 0.069993 Yaw: 90.205269 CharYaw: 90.205269
ToCursorDirection: X=-1.000 Y=-0.000 Z=0.000 ForwardDirection: X=0.003 Y=1.000 Z=0.000
CursorPos: X=-884.954 Y=-86.488 Z=0.000 CharPos: X=-490.000 Y=-86.443 Z=0.000
(поворачивается всегда на этот угол, независимо от расположения курсора)
DeprojectMousePositionToWorld принимает ссылки на объекты и записывает прям в них. Давно на плюсах не писал - отвык, тоже как-то непривычно)