I've just started out with my first game in Unity. It's a simple 2D Platformer with a tile-based level.
When coding in the movement, I used the Physics2D.OverlapCircle() and an empty to check whether my player was touching the ground. However, I need to use a layer to make sure only the ground is detected.
my code below
//fixed update used for physics calculations
void FixedUpdate()
{
//right or left arrows being pressed
float moveX = Input.GetAxis("Horizontal");
Vector2 moveDir = new Vector2(moveX * playerSpeed, rb.velocity.y);
rb.velocity = moveDir;
}
//update used for spacebar input and force
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.velocity = Vector2.up * jumpForce*Time.deltaTime;
}
//is my circle overlapping any other colliders
Collider2D collider = Physics2D.OverlapCircle(feet.position, checkRadius, groundLayer);
Debug.Log(collider);
}
When I tried assigning layers to my tiles, I couldn't find a way to do it.
I would be really grateful if anyone could show me how to, or if anyone can tell me a more efficient way to deal with jumping in a 2D platformer.
Collider2D collider = Physics2D.OverlapCircle(...
you are not checking for other colliders, you are checking only for the first collider being found. That could lead to bugs if there is more than one collider overlapping the circle. You might want to usePhysics2D.OverlapCircleAll
instead and then use afor
-loop to check if any of the returned colliders is relevant here. \$\endgroup\$