2D Player Alignment With Ground Not Quite Right
I've been trying to align my player character to slanted surfaces and I'm very close... The only problems are that 1. It's not 100% accurate. I've found that dividing hit.normal.x by 1.85 or some similar number helps somewhat, but at the steepest angles, the character's rotation becomes less-than-parallel. 2. The player doesn't rotate all the way around or go upside down. When I adjust the angle to past 90 degrees, he starts rotating back the way he came instead.
Here's my code:
using UnityEngine;
using System.Collections;
public class GroundCheckScript : MonoBehaviour
{
public float rayLength = 0.1f;
public float hitNormalAdjust = 1.85f;
public Quaternion sonicRotation;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
}
void FixedUpdate()
{
sonicRotation = gameObject.GetComponentInParent<RectTransform>().rotation;
RaycastHit2D hit = Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y), -transform.up, rayLength, 1);
if (hit.collider != null)
{
Debug.Log (hit.normal);
sonicRotation.z = -hit.normal.x / hitNormalAdjust;
gameObject.GetComponentInParent<RectTransform>().rotation = sonicRotation;
}
Debug.DrawRay (new Vector2(transform.position.x, transform.position.y), -transform.up * rayLength);
}
}
Honestly I'm not sure how to use the Raycast2D.normal variable or what exactly it looks like. I've just been tweeking it and experimenting and came this far so please excuse my code if it looks weird.
Your answer
![](https://koobas.hobune.stream/wayback/20220612060627im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Touch - Linecast collision detection 0 Answers
2d object moves only a little then stops 0 Answers
Hookshot in Unity 2D not working,Hookshot 2D not working 0 Answers
Raycast not detecting bullet 0 Answers