카메라 스크립트 패치

This commit is contained in:
KINDNICK 2025-05-10 15:22:21 +09:00
parent c12c9299e3
commit f0f578eddc

View File

@ -158,6 +158,8 @@ public class CameraManager : MonoBehaviour, IController
private InputHandler inputHandler; private InputHandler inputHandler;
private CameraPreset currentPreset; private CameraPreset currentPreset;
private Vector3 rotationCenter = Vector3.zero; private Vector3 rotationCenter = Vector3.zero;
private float currentOrbitDistance = 0f;
private float currentOrbitHeight = 0f;
private Vector3 rotationStartPosition; private Vector3 rotationStartPosition;
private bool isRotating = false; private bool isRotating = false;
@ -321,11 +323,15 @@ public class CameraManager : MonoBehaviour, IController
{ {
if (!isRotating) if (!isRotating)
{ {
// 회전 시작 시 현재 위치 저장 // 회전 시작 시 현재 상태 저장
isRotating = true; isRotating = true;
rotationStartPosition = cameraTransform.position; rotationStartPosition = cameraTransform.position;
// 현재 카메라의 y값을 기준으로 회전 중심점 설정
rotationCenter = new Vector3(0f, rotationStartPosition.y, 0f); rotationCenter = new Vector3(0f, rotationStartPosition.y, 0f);
// 현재 카메라의 회전 중심점으로부터의 거리와 높이 계산
Vector3 toCamera = cameraTransform.position - rotationCenter;
currentOrbitDistance = new Vector3(toCamera.x, 0f, toCamera.z).magnitude;
currentOrbitHeight = toCamera.y;
} }
Vector2 lookDelta = inputHandler.GetLookDelta(); Vector2 lookDelta = inputHandler.GetLookDelta();
@ -334,26 +340,19 @@ public class CameraManager : MonoBehaviour, IController
// 현재 회전값을 오일러 각도로 가져오기 // 현재 회전값을 오일러 각도로 가져오기
Vector3 currentEuler = cameraTransform.eulerAngles; Vector3 currentEuler = cameraTransform.eulerAngles;
// X축 회전값을 -80도에서 80도 사이로 제한하기 위해 360도 형식에서 변환 // Y축 회전만 적용 (수평 회전)
float currentX = currentEuler.x;
if (currentX > 180f) currentX -= 360f;
// 새로운 회전값 계산
float newX = currentX - lookDelta.y * rotationSensitivity;
float newY = currentEuler.y + lookDelta.x * rotationSensitivity; float newY = currentEuler.y + lookDelta.x * rotationSensitivity;
// X축 회전 제한 (-80도 ~ 80도) // 회전 적용 (X축 회전은 0으로 고정)
newX = Mathf.Clamp(newX, -80f, 80f); Quaternion targetRotation = Quaternion.Euler(0f, newY, 0f);
// 회전 적용 // 오비탈 회전을 위한 새로운 위치 계산
Quaternion targetRotation = Quaternion.Euler(newX, newY, 0f); Vector3 orbitPosition = targetRotation * Vector3.back * currentOrbitDistance;
orbitPosition.y = currentOrbitHeight; // 높이 유지
// 회전 중심점을 기준으로 새로운 위치 설정
cameraTransform.position = rotationCenter + orbitPosition;
cameraTransform.rotation = targetRotation; cameraTransform.rotation = targetRotation;
// 회전 시작 위치를 기준으로 회전 (y값 유지)
Vector3 relativePosition = rotationStartPosition - rotationCenter;
Vector3 rotatedPosition = targetRotation * new Vector3(relativePosition.x, 0f, relativePosition.z);
Vector3 newPosition = rotationCenter + rotatedPosition;
cameraTransform.position = newPosition;
} }
else else
{ {