From 9fe33c1ae076b0f6501619388e6b4cc872b76f80 Mon Sep 17 00:00:00 2001 From: smchoi <ws5260@naver.com> Date: 수, 31 7월 2024 10:37:31 +0900 Subject: [PATCH] BIgUpdate --- Assets/LevelController.cs | 75 +++++++++++++++++++++++-------------- 1 files changed, 47 insertions(+), 28 deletions(-) diff --git a/Assets/LevelController.cs b/Assets/LevelController.cs index 50319ba..82c70a4 100644 --- a/Assets/LevelController.cs +++ b/Assets/LevelController.cs @@ -15,6 +15,8 @@ public float sensitivity = 0.2f; // 마우스 움직임에 대한 민감도 private Vector3 rotationAxis; // 회전축 (기본값: X축) + private float currentAngle; + private Vector3 lastMousePosition; /// <summary> @@ -60,15 +62,16 @@ downTargetRos = q * Quaternion.Euler(0, maxAngle, 0); upTargetRos = q * Quaternion.Euler(0, minAngle, 0); } + + currentAngle = GetCurrentAngle(); } public void OnDrag() { isDragging = true; - startMouseY = Input.mousePosition.y; - startAngle = transform.localRotation.eulerAngles.z; - if (startAngle > 180) startAngle -= 360; // -180에서 180 사이의 각도로 변환 + lastMousePosition = Input.mousePosition; + currentAngle = GetCurrentAngle(); // 현재 } public void OffDrag() @@ -84,46 +87,62 @@ private void Update() { - - if (isDragging) { - float mouseDelta = Input.mousePosition.y - startMouseY; - float newAngle = startAngle - mouseDelta * sensitivity; - - // 레버의 각도를 제한된 범위 내로 조정 + Vector3 mouseDelta = Input.mousePosition - lastMousePosition; + float angleDelta = mouseDelta.y * sensitivity; + float newAngle = currentAngle - angleDelta; newAngle = Mathf.Clamp(newAngle, minAngle, maxAngle); - Vector3 currentRotation = transform.localRotation.eulerAngles; - if (RotationAxis == Axis.forward) - { - currentRotation.z = newAngle; - } - else if (RotationAxis == Axis.right) - { - currentRotation.x = newAngle; - } - else if (RotationAxis == Axis.up) - { - currentRotation.y = newAngle; - } - // 새로운 회전 적용 - transform.localRotation = Quaternion.Euler(currentRotation); + ApplyRotation(newAngle); + + lastMousePosition = Input.mousePosition; + currentAngle = newAngle; } - if (isRun) { time = Time.deltaTime * speed; if (isDown) { - transform.localRotation = Quaternion.Slerp(transform.localRotation, upTargetRos,time ); + transform.localRotation = Quaternion.Slerp(transform.localRotation, upTargetRos, time); } else { transform.localRotation = Quaternion.Slerp(transform.localRotation, downTargetRos, time); } - - } + } + } + + private float GetCurrentAngle() + { + Vector3 currentRotation = transform.localRotation.eulerAngles; + float angle = 0f; + + if (RotationAxis == Axis.forward) + angle = currentRotation.z; + else if (RotationAxis == Axis.right) + angle = currentRotation.x; + else if (RotationAxis == Axis.up) + angle = currentRotation.y; + + // -180에서 180 사이의 각도로 변환 + if (angle > 180) angle -= 360; + + return angle; + } + + private void ApplyRotation(float angle) + { + Vector3 currentRotation = transform.localRotation.eulerAngles; + + if (RotationAxis == Axis.forward) + currentRotation.z = angle; + else if (RotationAxis == Axis.right) + currentRotation.x = angle; + else if (RotationAxis == Axis.up) + currentRotation.y = angle; + + transform.localRotation = Quaternion.Euler(currentRotation); } } \ No newline at end of file -- Gitblit v1.8.0