Untitled
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