Fixed up some issues with camera rotation and removed functionality where moving camera disables servo and dc ui panels

This commit is contained in:
Christen
2026-02-11 17:27:30 -05:00
parent 93e0ec0ed9
commit cf5bf4b23b
4 changed files with 56 additions and 27 deletions

View File

@@ -11,14 +11,6 @@ public class ModuleSelector : MonoBehaviour
void Update() 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)) if (Input.GetMouseButtonDown(0))
{ {
// Ignore clicks over UI // Ignore clicks over UI

View File

@@ -4055,10 +4055,13 @@ MonoBehaviour:
panSpeed: 3.5 panSpeed: 3.5
zoomSpeed: 10 zoomSpeed: 10
moveSmoothTime: 0.12 moveSmoothTime: 0.12
orbitSpeed: 150 orbitSpeed: 20
minPitch: -80 minPitch: -80
maxPitch: 80 maxPitch: 80
orbitSmoothTime: 0.08 orbitSmoothTime: 0.08
lockCursorWhileOrbiting: 1
maxMouseDelta: 40
orbitSmoothing: 0.08
lookAtDuration: 0.25 lookAtDuration: 0.25
homeDuration: 0.35 homeDuration: 0.35
--- !u!114 &963194231 --- !u!114 &963194231

View File

@@ -18,11 +18,19 @@ public class UserCameraControl : MonoBehaviour
public float moveSmoothTime = 0.12f; // higher = snappier, lower = floatier public float moveSmoothTime = 0.12f; // higher = snappier, lower = floatier
[Header("Orbit")] [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 minPitch = -20f;
public float maxPitch = 80f; public float maxPitch = 80f;
public float orbitSmoothTime = 0.08f; 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")] [Header("Look / Home Smooth")]
public float lookAtDuration = 0.25f; public float lookAtDuration = 0.25f;
public float homeDuration = 0.35f; public float homeDuration = 0.35f;
@@ -84,35 +92,52 @@ public class UserCameraControl : MonoBehaviour
orbiting = true; orbiting = true;
SetCursor(eyeCursor); SetCursor(eyeCursor);
// stop any scripted rotation so user has control
StopLookRoutine();
SyncAnglesFromTransform(); SyncAnglesFromTransform();
lastMouse = (Vector2)Input.mousePosition;
yawDeltaSmoothed = pitchDeltaSmoothed = 0f; if (lockCursorWhileOrbiting)
yawDeltaVel = pitchDeltaVel = 0f; {
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
orbitDeltaSmoothed = Vector2.zero;
orbitDeltaVel = Vector2.zero;
} }
if (Input.GetMouseButtonUp(1)) if (Input.GetMouseButtonUp(1))
{
orbiting = false; orbiting = false;
if (lockCursorWhileOrbiting)
{
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
orbitDeltaSmoothed = Vector2.zero;
orbitDeltaVel = Vector2.zero;
return;
}
if (!orbiting) 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; // Clamp rare spikes (frame hitch / window focus changes)
Vector2 delta = mouse - lastMouse; dx = Mathf.Clamp(dx, -maxMouseDelta, maxMouseDelta);
lastMouse = mouse; dy = Mathf.Clamp(dy, -maxMouseDelta, maxMouseDelta);
float targetYawDelta = delta.x * orbitSpeed * dt; Vector2 targetDelta = new Vector2(dx, dy);
float targetPitchDelta = -delta.y * orbitSpeed * dt;
yawDeltaSmoothed = Mathf.SmoothDamp(yawDeltaSmoothed, targetYawDelta, ref yawDeltaVel, orbitSmoothTime); if (orbitSmoothing > 0f)
pitchDeltaSmoothed = Mathf.SmoothDamp(pitchDeltaSmoothed, targetPitchDelta, ref pitchDeltaVel, orbitSmoothTime); orbitDeltaSmoothed = Vector2.SmoothDamp(orbitDeltaSmoothed, targetDelta, ref orbitDeltaVel, orbitSmoothing);
else
orbitDeltaSmoothed = targetDelta;
yaw += yawDeltaSmoothed; yaw += orbitDeltaSmoothed.x * orbitSpeed;
pitch += pitchDeltaSmoothed; pitch -= orbitDeltaSmoothed.y * orbitSpeed;
pitch = Mathf.Clamp(pitch, minPitch, maxPitch); pitch = Mathf.Clamp(pitch, minPitch, maxPitch);
transform.rotation = Quaternion.Euler(pitch, yaw, 0f); transform.rotation = Quaternion.Euler(pitch, yaw, 0f);

View File

@@ -1,2 +1,11 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 664693941061d4a4ab8a0a945db827f3 guid: 664693941061d4a4ab8a0a945db827f3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: