Mario Galaxy Gravity?
I am trying to achieve Mario Galaxy gravity physics using ray casts. So far, it is almost working. It works for the most part on a sphere, except when I get to the bottom axis of the sphere, the player spins super fast as I am moving him. As for a cube planet, he sticks to any normal he is on and walks fine but does not rotate when reaching the corner. Instead, he keeps floating forward, but sometimes may slowly start to rotate one way or the other by accidentally hitting the corner, knocking him slightly, thus slowly rotating him. And no matter what shape of planet he is on, he is constantly vibrating when he hits a normal. Its as if the ray cast gravity is constantly pulling him into the cube, but his collider is preventing him from going through it, so they are fighting back and forth causing him to bob rapidly. These are the bugs in which I am facing. Anyone who can help me, I would greatly appreciate it. Thanks. Here is my code. This script is put on the player and the planet objects in question are on a LayerMask called "WorldLayerMask".
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RayCast : MonoBehaviour {
public LayerMask mask;
public float gravity = 1f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
Ray ray = new Ray(transform.position, -transform.up);
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo, Mathf.Infinity, mask, QueryTriggerInteraction.Ignore))
{
surface = hitInfo.collider.gameObject;
Debug.DrawLine(ray.origin, hitInfo.point, Color.red);
transform.position -= hitInfo.normal * gravity * Time.deltaTime;
transform.rotation = Quaternion.FromToRotation(Vector3.up * Time.deltaTime, hitInfo.normal);
}
else
{
Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100, Color.green);
}
}
}
Your answer
Follow this Question
Related Questions
Uneven Jump Heights 1 Answer
GravityBody hides Rigidbody 1 Answer
HOW TO ADD GRAVITY TO A OBJECT? 2 Answers
Gravity is not working 0 Answers