- Home /
Make Character slide along a surface in 2D sidescroller
Hi there. I am currently working on a 2D sidescroller using the scripts from the "Unity 2D Gameplay Tutorial". I managed to add some new features but I can't really get a handle on this one. I want the character to slide down surfaces marked as slopes. I tried using a physic material and setting the friction to 0 but this doesn't seem to work for character controllers. Anyone an idea how I could implement this?
Many thanks
Answer by Peter G · Jul 31, 2011 at 03:12 PM
You have to manually implement sliding. There are a few scripts on the unify wiki such as this one that should do what you want.
For a really quick example, you could do some thing like, and it will be a little easier since you are doing a 2D game:
var slideSpeed : float;
var angleForSlide : float = 30;
private var cosSlideAngle : float;
private var moveDirection : Vector3;
function Start () {
cosSlideAngle = Mathf.Cos(angleForSlide * Mathf.Deg2Rad);
}
function Update () {
var isSliding = false;
var hitInfo : RaycastHit;
if(Physics.Raycast(transform.position, -Vector3.up , out hitInfo, 5) ) {
var cosAngle = Vector3.Dot(Vector3.up, hit.normal);
if(cosAngle <= cosSlideAngle) {
isSliding = true;
var moveSpeed = slideSpeed * (1 - cosAngle);
//The steeper the hill, the faster we slide.
moveDirection = new Vector3(hit.normal.x , -hit.normal.y , 0 );
moveDirection = moveDirection.normalized;
moveDirection *= moveSpeed;
}
}
if(!isSliding) {
//Do normal character motion.
}
yourCharacterController.Move(moveDirection * Time.deltaTime);
}
Its worth noting that I didn't test this, and there are some circumstances that this would probably brake, but its just to give you an idea of ways to check the angle. If you look at the wiki script, you will see that they use Vector3.Angle() instead of the dot products for testing the slope. It's a matter of what works best for you.
Thanks a lot. I think I can fiddle something together using this!
Your answer
Follow this Question
Related Questions
How do I make my character fall off slopes grater than its slope limit? 0 Answers
How to add a value to a Raycast Vector 1 Answer
character controller side down slopes 1 Answer
How to check if a raycasthit detects an angle less than 45 degrees and touches the ground 2 Answers
Slope direction Vector3 downhill 2 Answers