From 7fdbf29371541bafac9c2b04429ec62ef7ca8463 Mon Sep 17 00:00:00 2001 From: Stefan Beer Date: Tue, 4 Jan 2022 14:11:38 +0100 Subject: [PATCH 1/2] Fixed scene view camera small input issue #29 --- Editor/ViewportController.cs | 17 +++++++++++++++-- Runtime/Settings/Settings.cs | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/Editor/ViewportController.cs b/Editor/ViewportController.cs index bc0c24b..205ae1d 100644 --- a/Editor/ViewportController.cs +++ b/Editor/ViewportController.cs @@ -87,8 +87,8 @@ static void Update() _wasHorizonLocked = Settings.LockHorizon; // Return if device is idle. - if (SpaceNavigatorHID.current.Translation.ReadValue() == Vector3.zero && - SpaceNavigatorHID.current.Rotation.ReadValue() == Vector3.zero) + if (ApproximatelyEqual(SpaceNavigatorHID.current.Translation.ReadValue(), Vector3.zero, Settings.TransSensEpsilon) && + ApproximatelyEqual(SpaceNavigatorHID.current.Rotation.ReadValue(), Vector3.zero, Settings.RotSensEpsilon)) { _wasIdle = true; return; @@ -431,6 +431,19 @@ private static Vector3 SnapOnTranslation(Vector3 v, float snap) } #endregion - Snapping - + + #region - Calibration - + + private static bool ApproximatelyEqual(Vector3 lhs, Vector3 rhs, float epsilon) + { + float num = lhs.x - rhs.x; + float num2 = lhs.y - rhs.y; + float num3 = lhs.z - rhs.z; + float num4 = num * num + num2 * num2 + num3 * num3; + return num4 < (9.99999944f * Mathf.Pow(10, -epsilon)); + } + + #endregion - Calibration - } } #endif \ No newline at end of file diff --git a/Runtime/Settings/Settings.cs b/Runtime/Settings/Settings.cs index aacf2c1..c4070eb 100644 --- a/Runtime/Settings/Settings.cs +++ b/Runtime/Settings/Settings.cs @@ -70,6 +70,12 @@ public static class Settings { public static Vector3 TelekinesisInvertTranslation, TelekinesisInvertRotation; public static Vector3 GrabMoveInvertTranslation, GrabMoveInvertRotation; + // Calibration + public const float TransSensEpsilonDefault = 11f; + public static float TransSensEpsilon = TransSensEpsilonDefault; + public const float RotSensEpsilonDefault = 11f; + public static float RotSensEpsilon = RotSensEpsilonDefault; + private static Vector2 _scrollPos; static Settings() { @@ -316,6 +322,29 @@ public static void OnGUI() { GUILayout.EndHorizontal(); #endregion - Axes inversion per mode - + #region - Calibration - + GUILayout.Space(10); + GUILayout.BeginVertical(); + GUILayout.Label("Calibration"); + GUILayout.Space(4); + + #region - Translation Epsilon - + GUILayout.BeginHorizontal(); + GUILayout.Label("Translation Epsilon", GUILayout.Width(120)); + TransSensEpsilon = EditorGUILayout.FloatField(TransSensEpsilon, GUILayout.Width(30)); + GUILayout.EndHorizontal(); + #endregion - Translation Epsilon - + + #region - Rotation Epsilon - + GUILayout.BeginHorizontal(); + GUILayout.Label("Rotation Epsilon", GUILayout.Width(120)); + RotSensEpsilon = EditorGUILayout.FloatField(RotSensEpsilon, GUILayout.Width(30)); + GUILayout.EndHorizontal(); + #endregion - Rotation Epsilon - + + GUILayout.EndVertical(); + #endregion - Calibration - + #region - Dead Zone - #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX GUILayout.BeginVertical(); @@ -398,6 +427,9 @@ public static void Write() { WriteAxisInversions(OrbitInvertTranslation, OrbitInvertRotation, "Orbit"); WriteAxisInversions(TelekinesisInvertTranslation, TelekinesisInvertRotation, "Telekinesis"); WriteAxisInversions(GrabMoveInvertTranslation, GrabMoveInvertRotation, "Grab move"); + // Calibration + PlayerPrefs.SetFloat("Translation sensitivity epsilon", TransSensEpsilon); + PlayerPrefs.SetFloat("Rotation sensitivity epsilon", RotSensEpsilon); } /// @@ -439,6 +471,9 @@ public static void Read() { ReadAxisInversions(ref OrbitInvertTranslation, ref OrbitInvertRotation, "Orbit"); ReadAxisInversions(ref TelekinesisInvertTranslation, ref TelekinesisInvertRotation, "Telekinesis"); ReadAxisInversions(ref GrabMoveInvertTranslation, ref GrabMoveInvertRotation, "Grab move"); + // Calibration + TransSensEpsilon = PlayerPrefs.GetFloat("Translation sensitivity epsilon", TransSensEpsilonDefault); + RotSensEpsilon = PlayerPrefs.GetFloat("Rotation sensitivity epsilon", RotSensEpsilonDefault); } /// From d6f2e95423af1179b1cfa7cb6bc8e86b437caa9c Mon Sep 17 00:00:00 2001 From: Sorra Date: Mon, 10 Jan 2022 22:09:30 -0800 Subject: [PATCH 2/2] Skip fly when in 2D Scene View When in 2D scene view to edit a UI a warning is thrown. I have no idea if this is the best way to fix it, but it works and flying makes no sense in 2D so it works for me. Fixes #30 --- Editor/ViewportController.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Editor/ViewportController.cs b/Editor/ViewportController.cs index bc0c24b..4cf0e0b 100644 --- a/Editor/ViewportController.cs +++ b/Editor/ViewportController.cs @@ -132,6 +132,8 @@ static void Fly(SceneView sceneView) static void Fly(SceneView sceneView, Vector3 translationInversion, Vector3 rotationInversion) { + if (sceneView.in2DMode) return; + SyncRigWithScene(); // Apply inversion of axes for fly/grabmove mode. @@ -433,4 +435,4 @@ private static Vector3 SnapOnTranslation(Vector3 v, float snap) #endregion - Snapping - } } -#endif \ No newline at end of file +#endif