Untitled
unknown
plain_text
2 years ago
4.4 kB
9
Indexable
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMovement : MonoBehaviour { private float horizontal; [SerializeField] private float speed = 8f; [SerializeField] private float jumpingPower = 16f; private bool isFacingRight = true; [SerializeField] private float coyoteTime = 0.3f; private float coyoteTimeCounter; [SerializeField] private float jumpBufferTime = 0.2f; private float jumpBufferCounter; private bool canDash = true; private bool isDashing; private Animator anim; private SpriteRenderer sprite; [SerializeField] private float dashingPower = 24f; [SerializeField] private float dashingTime = 0.2f; [SerializeField] private float dashingCooldown = 1f; [SerializeField] private AudioSource jumpsfx; [SerializeField] private AudioSource dashsfx; [SerializeField] private Rigidbody2D rb; [SerializeField] private Transform groundCheck; [SerializeField] private LayerMask groundLayer; [SerializeField] private TrailRenderer tr; private enum MovementState { idle, running, jumping } private float dirX = 0f; private void Start() { sprite = GetComponent<SpriteRenderer>(); anim = GetComponent<Animator>(); } void Update() { horizontal = Input.GetAxisRaw("Horizontal"); if (IsGrounded()) { coyoteTimeCounter = coyoteTime; } else { coyoteTimeCounter -= Time.deltaTime; } if (Input.GetButtonDown("Jump")) { jumpBufferCounter = jumpBufferTime; } else { jumpBufferCounter -= Time.deltaTime; } if (isDashing) { return; } if (coyoteTimeCounter > 0f && jumpBufferCounter > 0f ) { rb.velocity = new Vector2(rb.velocity.x, jumpingPower); jumpsfx.Play(); jumpBufferCounter = 0f; } if (Input.GetButtonUp("Jump") && rb.velocity.y > 0f) { rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y * 0.5f); coyoteTimeCounter = 0f; } if (Input.GetKeyDown(KeyCode.UpArrow) && rb.velocity.y > 0f) { rb.velocity = new Vector2(rb.velocity.x, jumpingPower); jumpsfx.Play(); coyoteTimeCounter = 0f; } if (Input.GetKeyDown(KeyCode.LeftShift) && canDash) { StartCoroutine(Dash()); dashsfx.Play(); } UpdateAnimationState(); Flip(); } private void UpdateAnimationState() { MovementState state; if (dirX > 0f) { state = MovementState.running; } else if (dirX < 0f) { state = MovementState.running; } else { state = MovementState.idle; } if (rb.velocity.y > .1f) { state = MovementState.jumping; } anim.SetInteger("state", (int)state); } private void FixedUpdate() { if (isDashing) { return; } rb.velocity = new Vector2(horizontal * speed, rb.velocity.y); } private bool IsGrounded() { return Physics2D.OverlapCircle(groundCheck.position, 0.2f, groundLayer); } private void Flip() { if (isFacingRight && horizontal < 0f || !isFacingRight && horizontal > 0f) { isFacingRight = !isFacingRight; Vector3 localScale = transform.localScale; localScale.x *= -1f; transform.localScale = localScale; } } private IEnumerator Dash() { canDash = false; isDashing = true; float originalGravity = rb.gravityScale; rb.gravityScale = 0f; rb.velocity = new Vector2(transform.localScale.x * dashingPower, 0f); tr.emitting = true; yield return new WaitForSeconds(dashingTime); tr.emitting = false; rb.gravityScale = originalGravity; isDashing = false; yield return new WaitForSeconds(dashingCooldown); canDash = true; } }
Editor is loading...