카메라 스크립트 패치
This commit is contained in:
parent
c12c9299e3
commit
f0f578eddc
@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user