diff --git a/Assets/Scenes/Test Scenes/Static Ring.unity b/Assets/Scenes/Test Scenes/Static Ring.unity index b78531a..130ea2e 100644 --- a/Assets/Scenes/Test Scenes/Static Ring.unity +++ b/Assets/Scenes/Test Scenes/Static Ring.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01bfc90496a009a41f66e8b1cbca917aecbffb39c1f8526138dfd9b6e8d0bbd1 -size 304950 +oid sha256:4dda353f2766fa2549ab0aee9f8998ea8cfed3fefda916800d9f55a09a3fae7d +size 316252 diff --git a/Assets/Scripts/Static Physics/CoriolisEffect.cs b/Assets/Scripts/Static Physics/CoriolisEffect.cs index 5112348..529fad8 100644 --- a/Assets/Scripts/Static Physics/CoriolisEffect.cs +++ b/Assets/Scripts/Static Physics/CoriolisEffect.cs @@ -4,6 +4,9 @@ using UnityEngine; public class CoriolisEffect : MonoBehaviour { + + public Vector3 downDir => Vector3.ProjectOnPlane((transform.position - center.transform.position), Vector3.forward); + // Start is called before the first frame update public GameObject center; private Rigidbody rb; @@ -13,16 +16,22 @@ public class CoriolisEffect : MonoBehaviour void Start() { rb = GetComponent(); + rb.useGravity = false; } // Update is called once per frame void FixedUpdate() { - Vector3 direction = (transform.position - center.transform.position).normalized; - Vector3 coriolisVector = Vector3.Cross(direction, new Vector3(0,0,1)).normalized; + if (IsGrounded()) + return; + + Vector3 direction = downDir.normalized; + Vector3 coriolisVector = -Vector3.Cross(direction, new Vector3(0,0,1)).normalized; Debug.Log(LerpCoriolisForce()); float force = LerpCoriolisForce(); - rb.AddForce(coriolisVector * force * coriolisForceMultiplier, ForceMode.Acceleration); + + rb.AddForce(coriolisVector * force * coriolisForceMultiplier * Time.deltaTime, ForceMode.Acceleration); + //rb.AddForce(direction * LerpGravity(), ForceMode.Acceleration); Debug.DrawRay(transform.position, coriolisVector * force, Color.red); } @@ -34,6 +43,20 @@ public class CoriolisEffect : MonoBehaviour float LerpCoriolisForce() { Debug.Log(Vector3.Distance(gameObject.transform.position, center.transform.position)); - return Mathf.Lerp(maxCoriolisForce, 0, Vector3.Distance(gameObject.transform.position, center.transform.position) / 12.75f); + return Mathf.Lerp(maxCoriolisForce, 0, downDir.magnitude / 12.75f); + } + + private bool IsGrounded() + { + + Ray ray = new Ray(transform.position, downDir.normalized); + RaycastHit hit; + + if (Physics.Raycast(ray, out hit, 0.25f)) + { + return true; + } + return false; + } } diff --git a/Assets/World Assets/Materials/DoubleSided.mat b/Assets/World Assets/Materials/DoubleSided.mat index f3850fd..cf18aeb 100644 --- a/Assets/World Assets/Materials/DoubleSided.mat +++ b/Assets/World Assets/Materials/DoubleSided.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: DoubleSided - m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_Shader: {fileID: 4800000, guid: af3776ac6a322cb4da895ba92b2bc463, type: 3} m_ShaderKeywords: m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -75,3 +75,4 @@ Material: m_Colors: - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _NormalDefault: {r: 128, g: 128, b: 255, a: 1}