diff options
| author | realtradam <[email protected]> | 2022-12-11 02:54:14 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2022-12-11 02:54:14 -0500 |
| commit | 4e32bf914903b88a766e7d6166faf34cb4ba4620 (patch) | |
| tree | 7479dc98bdd6c90433b3286b188d1e9b861bad78 /Assets/Scripts/OrbitCamera.cs | |
| parent | 1b7c9c7fc27541bb9420b91b3cd68f3a726e435c (diff) | |
| download | Magnet-Run-3D-4e32bf914903b88a766e7d6166faf34cb4ba4620.tar.gz Magnet-Run-3D-4e32bf914903b88a766e7d6166faf34cb4ba4620.zip | |
single planet gravity
Diffstat (limited to 'Assets/Scripts/OrbitCamera.cs')
| -rw-r--r-- | Assets/Scripts/OrbitCamera.cs | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/Assets/Scripts/OrbitCamera.cs b/Assets/Scripts/OrbitCamera.cs index 81a6941..c0c84a7 100644 --- a/Assets/Scripts/OrbitCamera.cs +++ b/Assets/Scripts/OrbitCamera.cs @@ -41,6 +41,9 @@ public class OrbitCamera : MonoBehaviour Vector3 orbitAngles = new Vector2(45f, 0f);
+ Quaternion gravityAlignment = Quaternion.identity;
+ Quaternion orbitRotation;
+
[SerializeField]
LayerMask obstructionMask = -1;
@@ -48,20 +51,23 @@ public class OrbitCamera : MonoBehaviour {
regularCamera = GetComponent<Camera>();
focusPoint = focus.position;
- transform.localRotation = Quaternion.Euler(orbitAngles);
+ transform.localRotation = orbitRotation = Quaternion.Euler(orbitAngles);
+ OnValidate();
}
void LateUpdate()
{
+ gravityAlignment = Quaternion.FromToRotation(
+ gravityAlignment * Vector3.up,
+ CustomGravity.GetUpAxis(focusPoint)
+ ) * gravityAlignment;
UpdateFocusPoint();
- Quaternion lookRotation;
if(ManualRotation() || AutomaticRotation())
{
ConstrainAngles();
- lookRotation = Quaternion.Euler(orbitAngles);
+ orbitRotation = Quaternion.Euler(orbitAngles);
}
- else
- lookRotation = transform.localRotation;
+ Quaternion lookRotation = gravityAlignment * orbitRotation;
Vector3 lookDirection = lookRotation * Vector3.forward;
Vector3 lookPosition = focusPoint - lookDirection * distance;
@@ -153,9 +159,11 @@ public class OrbitCamera : MonoBehaviour if(Time.unscaledTime - lastManualRotationTime < alignDelay)
return false;
+ Vector3 alignedDelta = Quaternion.Inverse(gravityAlignment) *
+ (focusPoint - previousFocusPoint);
Vector2 movement = new Vector2(
- focusPoint.x - previousFocusPoint.x,
- focusPoint.z - previousFocusPoint.z
+ alignedDelta.x,
+ alignedDelta.z
);
float movementDeltaSqr = movement.sqrMagnitude;
if(movementDeltaSqr < 0.0001f)
|
