Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Problems with 2D Collider

I wanted to make a 2D character controller but I ran into some problems . I don't know if all these are code problems, I am still learning unity. Here are the problems:

1.Character(which is a unity 2D square) phases into a wall a little when moving towards the wall

2.Player floats of the ground a little so I need to change the offset on the collider, I don't think this is the best solution for the problem

Here is the code

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class PlayerController : MonoBehaviour
{
    private Rigidbody2D body;


    private float movementX;
    private float speed = 7f;


    public float jumpForce = 200f;


    private bool isGrounded;
    [SerializeField] private LayerMask whatIsGround;
    private float groundedRadius = 0.4f;
    [SerializeField] private Transform groundCheck;


    private bool isFacingRight;
    
    private void Awake() 
    {
        body = GetComponent<Rigidbody2D>();
    }


    void Update()
    {
        Move();
        GroundCheck();
        Jump();
        if(movementX < 0 && !isFacingRight)
            {
                Flip();
            }
        else if(movementX > 0 && isFacingRight)
            {
                Flip();
            }
    }


    private void Move()
    {
        movementX = Input.GetAxisRaw("Horizontal");
        transform.position += new Vector3(movementX, 0f, 0f) * speed * Time.deltaTime;
    }


    private void Jump()
    {
        if(isGrounded && Input.GetButtonDown("Jump"))
        {
            isGrounded = false;
            body.AddForce(new Vector2(0f, jumpForce));
        }
    }


    private void GroundCheck()
    {
        Collider2D collider = Physics2D.OverlapCircle(groundCheck.position, groundedRadius, whatIsGround);


        if(collider != null)
        {
            isGrounded = true;
        }
        else
            isGrounded =  false;
    }


    private void Flip()
    {
        isFacingRight = !isFacingRight;
        transform.Rotate(0f, 180f, 0f);
    }


    private void OnDrawGizmos() 
    {
        Gizmos.DrawWireSphere(groundCheck.position, groundedRadius);    
    }
}


Sign In or Register to comment.