- Home /
Character clips into the ground in 2D platformer
I'm working on a 2D platformer in Unity 2D. In the game, the platforms are a series of rectangles and all use box colliders as well as the platform effector.
The problem is that sometimes when the character jumps and lands on a platform, the character clips slightly down into the ground before immediately being moved back up to rest on the platform, and this is noticeable so can seem jarring to the player.
The character controller script I'm using for the player is below - does anyone know what is causing this?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
public float moveSpeed = 4.5f;
public float jumpHeight = 14f;
void Start () {
moveSpeed = 5.5f;
jumpHeight = 14f;
}
void Update () {
float xvel = GetComponent<Rigidbody2D>().velocity.x;
float yvel = GetComponent<Rigidbody2D>().velocity.y;
if ((Input.GetKeyDown(KeyCode.UpArrow)||Input.GetKeyDown(KeyCode.W))&& yvel==0)
{
yvel = jumpHeight;
}
if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A))
{
xvel = -moveSpeed;
}
if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D))
{
xvel = moveSpeed;
}
GetComponent<Rigidbody2D>().velocity = new Vector2(xvel, yvel);
}
}
Well, am not completely sure, but I know that unity´s physics system is weird. Have you tried deactivating the gravity when the player is grounded? I was having similar issues and this seemed to have solved it. Besides that, I don´t recommend using a rigidbody as a controller since then the player won´t be able to walk on slopes because of, again, the crappy physics. However, don´t use unity´s character controller either since it only detects collisions in the direction is moving. Then again, if you really need physics, then maybe you can completely ignore the physics gravity and make all your movement, jumps and gravity by translating positions and raycasting. Or... if you have money, then buy this: https://assetstore.unity.com/packages/templates/systems/easy-character-movement-57985