GravityCtrl

 


using UnityEngine;

public class GravityCtrl: MonoBehaviour {
 //attach to all rigidbodies to orbit the world

 public GravityOrbit Gravity;
 private Rigidbody rb;

 public float RotationSpeed = 20;

 //start is called before the first frame update
 void Start() {
  Rb = GetComponent < Rigidbody > ();
 }

 void FixedUpdate() {
  if (Gravity) {
   Vector3 gravityUp = Vector3.zero;

   if (Gravity.FixedDirection) {
    gravityUp = Gravity.transform.up;
   } else {
    gravityUp = (transform.position - Gravity.transform.position).normalized;
   }
   //before Gravity.FixedDirection - only applied to spheres:
   //gravityUp = (transform.position - Gravity.transform.position).normalized;

   Vector3 localUp = transform.up;

   Quaternion targetrotation = Quaternion.FromToRotation(localUp, gravityUp) * transform.rotation;

   transform.up = Vector3.Lerp(transform.up, gravityUp, RotationSpeed * Time.deltaTime);

   //push down for gravity
   Rb.AddForce((-gravityUp * Gravity.Gravity) * Rb.mass);
  }
 }

}