From cf5bf4b23b49aefac52e54cddea9382a0b6c12f6 Mon Sep 17 00:00:00 2001 From: Christen Date: Wed, 11 Feb 2026 17:27:30 -0500 Subject: [PATCH] Fixed up some issues with camera rotation and removed functionality where moving camera disables servo and dc ui panels --- Assets/ModuleSelector.cs | 8 ----- Assets/Scenes/SampleScene.unity | 5 ++- Assets/UserCameraControl.cs | 59 +++++++++++++++++++++++--------- Assets/UserCameraControl.cs.meta | 11 +++++- 4 files changed, 56 insertions(+), 27 deletions(-) diff --git a/Assets/ModuleSelector.cs b/Assets/ModuleSelector.cs index 867d3ab..cc95dcc 100644 --- a/Assets/ModuleSelector.cs +++ b/Assets/ModuleSelector.cs @@ -11,14 +11,6 @@ public class ModuleSelector : MonoBehaviour void Update() { - // If user is moving the camera, deselect current module - if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || - Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D)) - { - ClearSelection(); - return; - } - if (Input.GetMouseButtonDown(0)) { // Ignore clicks over UI diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 9f9738f..f59275c 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -4055,10 +4055,13 @@ MonoBehaviour: panSpeed: 3.5 zoomSpeed: 10 moveSmoothTime: 0.12 - orbitSpeed: 150 + orbitSpeed: 20 minPitch: -80 maxPitch: 80 orbitSmoothTime: 0.08 + lockCursorWhileOrbiting: 1 + maxMouseDelta: 40 + orbitSmoothing: 0.08 lookAtDuration: 0.25 homeDuration: 0.35 --- !u!114 &963194231 diff --git a/Assets/UserCameraControl.cs b/Assets/UserCameraControl.cs index 082b10e..c17ad19 100644 --- a/Assets/UserCameraControl.cs +++ b/Assets/UserCameraControl.cs @@ -18,11 +18,19 @@ public class UserCameraControl : MonoBehaviour public float moveSmoothTime = 0.12f; // higher = snappier, lower = floatier [Header("Orbit")] - public float orbitSpeed = 180f; // degrees/sec per pixel-ish delta + public float orbitSpeed = 20f; // degrees/sec per pixel-ish delta public float minPitch = -20f; public float maxPitch = 80f; public float orbitSmoothTime = 0.08f; + [Header("Orbit Feel")] + public bool lockCursorWhileOrbiting = true; + public float maxMouseDelta = 40f; // clamps rare huge spikes + public float orbitSmoothing = 0.08f; // 0 = no smoothing, ~0.05-0.15 feels nice + + Vector2 orbitDeltaSmoothed; + Vector2 orbitDeltaVel; + [Header("Look / Home Smooth")] public float lookAtDuration = 0.25f; public float homeDuration = 0.35f; @@ -84,35 +92,52 @@ public class UserCameraControl : MonoBehaviour orbiting = true; SetCursor(eyeCursor); - // stop any scripted rotation so user has control - StopLookRoutine(); - SyncAnglesFromTransform(); - lastMouse = (Vector2)Input.mousePosition; - yawDeltaSmoothed = pitchDeltaSmoothed = 0f; - yawDeltaVel = pitchDeltaVel = 0f; + if (lockCursorWhileOrbiting) + { + Cursor.lockState = CursorLockMode.Locked; + Cursor.visible = false; + } + + orbitDeltaSmoothed = Vector2.zero; + orbitDeltaVel = Vector2.zero; } if (Input.GetMouseButtonUp(1)) + { orbiting = false; + if (lockCursorWhileOrbiting) + { + Cursor.lockState = CursorLockMode.None; + Cursor.visible = true; + } + + orbitDeltaSmoothed = Vector2.zero; + orbitDeltaVel = Vector2.zero; + return; + } + if (!orbiting) return; - float dt = Time.unscaledDeltaTime; + // Use Input axes while locked (stable, no screen-edge issues) + float dx = Input.GetAxisRaw("Mouse X"); + float dy = Input.GetAxisRaw("Mouse Y"); - Vector2 mouse = (Vector2)Input.mousePosition; - Vector2 delta = mouse - lastMouse; - lastMouse = mouse; + // Clamp rare spikes (frame hitch / window focus changes) + dx = Mathf.Clamp(dx, -maxMouseDelta, maxMouseDelta); + dy = Mathf.Clamp(dy, -maxMouseDelta, maxMouseDelta); - float targetYawDelta = delta.x * orbitSpeed * dt; - float targetPitchDelta = -delta.y * orbitSpeed * dt; + Vector2 targetDelta = new Vector2(dx, dy); - yawDeltaSmoothed = Mathf.SmoothDamp(yawDeltaSmoothed, targetYawDelta, ref yawDeltaVel, orbitSmoothTime); - pitchDeltaSmoothed = Mathf.SmoothDamp(pitchDeltaSmoothed, targetPitchDelta, ref pitchDeltaVel, orbitSmoothTime); + if (orbitSmoothing > 0f) + orbitDeltaSmoothed = Vector2.SmoothDamp(orbitDeltaSmoothed, targetDelta, ref orbitDeltaVel, orbitSmoothing); + else + orbitDeltaSmoothed = targetDelta; - yaw += yawDeltaSmoothed; - pitch += pitchDeltaSmoothed; + yaw += orbitDeltaSmoothed.x * orbitSpeed; + pitch -= orbitDeltaSmoothed.y * orbitSpeed; pitch = Mathf.Clamp(pitch, minPitch, maxPitch); transform.rotation = Quaternion.Euler(pitch, yaw, 0f); diff --git a/Assets/UserCameraControl.cs.meta b/Assets/UserCameraControl.cs.meta index acd73e9..65efbf9 100644 --- a/Assets/UserCameraControl.cs.meta +++ b/Assets/UserCameraControl.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: 664693941061d4a4ab8a0a945db827f3 \ No newline at end of file +guid: 664693941061d4a4ab8a0a945db827f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: