TopDown 게임을 만드는 중인 언렬 초보입니다.
마우스로 공격시 캐릭터에 마우스 클릭지점으로 회전을 주고싶어서
마우스 좌표를 월드좌표로 옮긴 후 SetActorRocation을 사용했는데 정면 90도 정도만 마우스 클릭(공격)시 회전이 되고, 뒤쪽 나머지 각도를 클릭하면 정반대방향으로 돌거나 아예 회전이 더 이상 안되네요..
혹시 해결법 아시면 코드나 함수 알려주시면 감사하겠습니다.
코드첨부.
void AClickMoveCharacter::TurnToCursor()
{
if (Controller != NULL)
{
FVector mouseLocation, mouseDirection;
AClickMovePlayerController* playerController = (AClickMovePlayerController*)GetWorld()->GetFirstPlayerController();
playerController->DeprojectMousePositionToWorld(mouseLocation, mouseDirection);
FRotator currentCharacterRotation = this->GetActorRotation();
FRotator targetRotation = (mouseDirection.Rotation());
FRotator newRotation = FRotator(currentCharacterRotation.Pitch, targetRotation.Yaw, currentCharacterRotation.Roll);
this->SetActorRotation(newRotation);
}
}
잘 모르는데 mouseDirection이 누구 기준으로 방향 나오는거임?
저건 언리얼에서 마우스 좌표를 2d로 계산해서 가지고 있는걸 가져왔어요. 언리얼은 저렇게 그냥 가져오면 되는게 꽤 많아요.. 마우스 좌표는 기준이 없고 화면2d상 좌표인데 그걸 월드좌표로 변환해서 액터 방향전환으로 사용하는데 전방 90도정도만 제대로 적용이 되네요:
액터 좌표, 마우스 좌표, 마우스 방향 디버그해서 값 확인해보는게 빠를듯