Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
1.3 KiB

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class CoriolisEffect : MonoBehaviour
  5. {
  6. // Start is called before the first frame update
  7. public GameObject center;
  8. private Rigidbody rb;
  9. private const float MAX_GRAVITY = 9.8f;
  10. public float maxCoriolisForce;
  11. public float coriolisForceMultiplier = 2f;
  12. void Start()
  13. {
  14. rb = GetComponent<Rigidbody>();
  15. }
  16. // Update is called once per frame
  17. void FixedUpdate()
  18. {
  19. Vector3 direction = (transform.position - center.transform.position).normalized;
  20. Vector3 coriolisVector = Vector3.Cross(direction, new Vector3(0,0,1)).normalized;
  21. Debug.Log(LerpCoriolisForce());
  22. float force = LerpCoriolisForce();
  23. rb.AddForce(coriolisVector * force * coriolisForceMultiplier, ForceMode.Acceleration);
  24. Debug.DrawRay(transform.position, coriolisVector * force, Color.red);
  25. }
  26. float LerpGravity()
  27. {
  28. return Mathf.Lerp(0, MAX_GRAVITY, Vector3.Distance(gameObject.transform.position, center.transform.position) / 12.75f);
  29. }
  30. float LerpCoriolisForce()
  31. {
  32. Debug.Log(Vector3.Distance(gameObject.transform.position, center.transform.position));
  33. return Mathf.Lerp(maxCoriolisForce, 0, Vector3.Distance(gameObject.transform.position, center.transform.position) / 12.75f);
  34. }
  35. }