- Home /
 
Cubic planets with gravity and player rotation.
Hi, i've search a long time for find a working cubic planet script. All what i want is: the player rotate on the corner (not direct rotation, "smooth" rotation) i also want that the player can walk, look around (mouse look) and finally i want that there have a cutoff distance. Sorry for bad english, (google traduction...). This is a code but it don't work with player, there is a problem; it rotate oddly and the smooth rotation is a gross rotation... Six month of screeching please help my. Thank in advance Code:
using UnityEngine; using System.Collections;
public class GravityTest : MonoBehaviour { public float gravity = 100.0f; public float cutoffDistance = 10.0f; public Rigidbody planet; public Rigidbody player;
 void Update () {
     Ray ray = new Ray(transform.position, -transform.up);
     RaycastHit hit;
     Physics.Raycast(ray,out hit);
     if(hit.normal != Vector3.zero){
         transform.up = hit.normal;
     }
 }
 
 private Vector3[] m_GravityDirections =
 {
     Vector3.up,
     Vector3.down,
     Vector3.left,
     Vector3.right,
     Vector3.forward,
     Vector3.back
 };
 
 private float UniversalGravitation(Rigidbody a, Rigidbody b)
 {
     float distance = Vector3.Distance(a.transform.position, b.transform.position);
     if (distance >= cutoffDistance)
         return 0.0f;
     
     return gravity * (a.mass * b.mass) / distance;
 }
 
 private Vector3 CubeGravityDirection(Rigidbody planet, Rigidbody other)
 {
     float bestDot = -1.0f;
     Vector3 direction = Vector3.zero;
     
     for (int index=0; index < m_GravityDirections.Length; index++)
     {
         Vector3 gravityDirection = planet.transform.TransformVector(m_GravityDirections[index]).normalized;
         Vector3 directionToOther = (other.transform.position - planet.transform.position).normalized;
         
         float dot = Vector3.Dot(gravityDirection, directionToOther);
         
         if (dot > bestDot)
         {
             direction = gravityDirection;
             bestDot = dot;
         }
     }
     
     return direction;
 }
 
 private Vector3 CubeGravityForce(Rigidbody planet, Rigidbody other)
 {
     float gravity = UniversalGravitation(planet, other);
     Vector3 direction = CubeGravityDirection(planet, other);
     
     return gravity * direction * -1.0f;
 }
 
 public void FixedUpdate()
 {
     Vector3 gravityForce = CubeGravityForce(planet, player);
     player.AddForce(gravityForce);
     
     Vector3 up = CubeGravityDirection(planet, player);
     player.transform.rotation = Quaternion.LookRotation(player.transform.forward, up);
 }
 
               }
               Comment
              
 
               
              Your answer