- Home /
2D Slope Sliding: how to prevent with transform.translate logic
Hello everyone,
for the game that I'm currently developing (2D sidescroller) I've decided to use a custom controller (written by me) that uses the "transform.translate" method to move the character and check collisions between objects.
For collision I use a simple but quite versatile code
Vector2 PCsize = new Vector2(playerCollider.size.x, playerCollider.size.y); //This line stores the player collider size
Collider2D[] hits = Physics2D.OverlapBoxAll(transform.position, PCsize, 0, groundMask); //PCsize is used to determine the overlapbox dimension
pC_SmB.isTouchingGround = false; //Bool to determine is player is touching ground
foreach (Collider2D hit in hits)
{
ColliderDistance2D colliderDistance = hit.Distance(playerCollider);
if (colliderDistance.isOverlapped)
{
transform.Translate(colliderDistance.pointA - colliderDistance.pointB);
}
if (Vector2.Angle(colliderDistance.normal, Vector2.up) < angleGroundCheck && velocity.y < 0)
{
pC_SmB.isTouchingGround = true;
}
}
This piece of code basically checks if the player collider overlaps with everything under a certain angle (89, to avoid wall issues) and move the character in position. This piece of code works quite well and I've expanded it to use on enemies and manage one way platforms, conveyor belts ecc..
The issue I'm experiencing is nothing unusual, but behaves differently than what I've found on the web. Basically the character slides down the slope when idle, and bounce a little when moving down a slope. So far its the usual behaviour of slopes in Unity. The difference here is that in my case, the character moves down the slope not because of velocity (the "isTouchingGround" check on a slope returns true, and both velocity.x and velocity.y are at 0) but because of a change in it's x and y transform.position.
I've tried several solutions, from Sebastian Lague approach to slopes to Jay Byrde (https://gist.github.com/ashblue/5b3dafdc0a09eea729b7) quick solution, but I can't seem to stop the player from slowly sliding down the slope.
Anyone that have approached collision like me that solved this issue?
Your answer
Follow this Question
Related Questions
Sliding down a slope with a character controller 1 Answer
Why does my fps controller's motion get disabled after it collides with an enemy cube? 0 Answers
how to stop player movemnt when there is something near him 3 Answers
2D - Detect Slopes x Walls 1 Answer
Unity 5: Mecanim/Animator-Driven Collision No Loner Sliding Along Walls 1 Answer