- Home /
Tilting the game object on the slopes
Hi,
I'm making a 2d platformer in which I have slopes. My player should recognize the slopes and tilt accordingly. Is there any effective solution for recognizing the slopes? I have an idea to attach a small empty game object and test it against the land to determine whether he is on slope or not. Is it expensive to do this method? I would love to hear some of your solutions for the problem.
You can think of normal as a ray that is perpendicular to a surface. If you are using a collision such as what you get from OnCollisionEnter(), then you will get back an array of contact points. You could access the normal for the first contact point with:
Vector3 v3Normal = collision.contacts[0].normal;
if you are using a raycast to get your hit point, you would get the normal like:
Vector3 v3Normal = hit.normal;
So I have to shoot ray under my character and get the normal and compare it with angles between them? But how do I get the slope's normal?
public class AlignWithNormal : $$anonymous$$onoBehaviour {
Ray ray = new Ray(Vector3.zero, Vector3.down);
RaycastHit hit;
void Update () {
ray.origin = transform.position;
if (Physics.Raycast (ray, out hit)) {
transform.rotation = Quaternion.FromToRotation (Vector3.up, hit.normal);
}
}
}
Answer by MikeNewall · Feb 23, 2013 at 10:01 PM
You need to fire a ray at the ground and get the surface normal from the hit info. Then you can use the normal direction to set your rotation.
Your answer
![](https://koobas.hobune.stream/wayback/20220613093251im_/https://answers.unity.com/themes/thub/images/avi.jpg)