Untitled

 avatar
unknown
plain_text
a month ago
2.2 kB
3
Indexable
using UnityEditor.Callbacks;
using UnityEngine;
using System.Collections;


public class playerController : MonoBehaviour
{ 
    public float speed;
    public float jump;
    private float Move;
    private Rigidbody2D rb;
    private SpriteRenderer spriteRenderer;
    private bool canDoubleJump;
    private float coyoteTime = 0.2f;
    private float coyoteTimeCounter;
    private float jumpBufferTime = 0.2f;
    private float jumpBufferCounter;


    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        Move = Input.GetAxis("Horizontal");
        if(IsGrounded()) {
            coyoteTimeCounter = coyoteTime;
        }
        else {
            coyoteTimeCounter -= Time.deltaTime;
        }
        if(Input.GetButtonDown("Jump"))
        {
            jumpBufferCounter = jumpBufferTime;
        }
        else {
            jumpBufferCounter -= Time.deltaTime;
        }
        rb.linearVelocity = new Vector2(Move * speed, rb.linearVelocity.y);
        if(Move < 0) {
            gameObject.transform.localScale = new Vector2(-1,1);
        }
        else if(Move > 0) {
            gameObject.transform.localScale = new Vector2(1,1);

        }
        if(jumpBufferCounter > 0f && coyoteTimeCounter > 0f || Input.GetButtonDown("Jump") && canDoubleJump ) {
            rb.AddForce(new Vector2(rb.linearVelocityX,jump),ForceMode2D.Impulse);
            jumpBufferCounter = 0f;
            coyoteTimeCounter = 0f;
            StartCoroutine(JumpCooldown());

        }
        if(Input.GetButtonUp("Jump") && rb.linearVelocityX > 0f) {
            rb.linearVelocity = new Vector2(rb.linearVelocityX, rb.linearVelocityY * 0.5f);
        }
       
    }

    bool IsGrounded() 
    {
        Collider2D hit = Physics2D.OverlapCircle(transform.position,0.2f, LayerMask.GetMask("ground"));
        if(hit){return true;}
        else{return false;}
    }
    private bool canJump = true;
private float jumpCooldown = 0.1f;

    IEnumerator JumpCooldown()
    {
    canJump = false;
    yield return new WaitForSeconds(jumpCooldown);
    canJump = true;
    }
}
Leave a Comment