// Update is called once per frame void FixedUpdate() { RaycastHit hit; gravity_field.SetGravity(this); if (Vector3.Dot(ArenaDown, transform.up) > 0.5f) { var q = Quaternion.FromToRotation(transform.up, -ArenaDown); transform.rotation *= q; } if (Physics.Raycast(transform.position, ArenaDown, out hit, Mathf.Infinity, Layers.Field)) { rigidbody.AddForce(-ArenaDown * (hoverForce * (hoverDistance - hit.distance) - hoverDampen * (Vector3.Dot(FloatingBody.velocity, -ArenaDown))), ForceMode.Acceleration); Debug.DrawRay(transform.position, ArenaDown * 25.0f, Color.green); } else { rigidbody.AddForce(ArenaDown * hoverForce, ForceMode.Acceleration); } }