/
KasatkinGV
/
CourseWork
Обзор
Документация
Войти
/
KasatkinGV
/
CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
PlayerController.cs
127 строк
3 KB
KasatkinGV
upload files
11 июн 2025, 01:06
11 июн 2025, 01:06
3efd0d1
Код
Авторство
О чём код?
using UnityEngine; public class PlayerController : MonoBehaviour { [Header("Movement Settings")] [SerializeField] private float moveSpeed; [SerializeField] private float jumpForce; [Header("Ground Detection")] [SerializeField] private Transform groundCheck; [SerializeField] private LayerMask groundLayer; [SerializeField] private float groundCheckRadius; private Rigidbody2D rb; private Animator animator; private PlayerAttack playerAttack; private PlayerBlock playerBlock; private PlayerHealth playerHealth; private float moveInput; private bool isGrounded; private bool IsAttacking => playerAttack.IsAttacking; private bool IsBlocked => playerBlock.IsBlocked; private bool IsHurted => playerHealth.IsHurted; private bool CanMove => !IsAttacking && !IsBlocked && !IsHurted; private void Awake() { rb = GetComponent<Rigidbody2D>(); animator = GetComponent<Animator>(); playerAttack = GetComponent<PlayerAttack>(); playerBlock = GetComponent<PlayerBlock>(); playerHealth = GetComponent<PlayerHealth>(); } private void Update() { if (PauseMenuController.IsPaused) return; moveInput = Input.GetAxisRaw("Horizontal"); isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer); HandleHeal(); HandleJump(); HandleAnimations(); HandleCancel(); FlipSprite(); } private void FixedUpdate() { HandleMovement(); } private void HandleHeal() { if (Input.GetKeyDown(KeyCode.H)) { playerHealth.Heal(); } } private void HandleMovement() { if (CanMove) { rb.linearVelocity = new Vector2(moveInput * moveSpeed, rb.linearVelocity.y); } else if (Mathf.Abs(rb.linearVelocity.y) < 0.1f) { rb.linearVelocity = Vector2.zero; } } private void HandleJump() { if (Input.GetButtonDown("Jump") && isGrounded) { rb.linearVelocity = new Vector2(rb.linearVelocity.x, jumpForce); } } private void HandleAnimations() { animator.SetBool("isRunning", Mathf.Abs(moveInput) > 0.01f); animator.SetBool("isGrounded", isGrounded); animator.SetFloat("verticalVelocity", rb.linearVelocity.y); } private void HandleCancel() { if (IsAttacking && IsHurted) { playerAttack.CancelAttack(); } if (IsAttacking && Input.GetButtonDown("Jump")) { playerAttack.CancelAttack(); } if (IsBlocked && Input.GetButtonDown("Jump")) { playerBlock.CancelBlock(); } } private void FlipSprite() { if (moveInput > 0.01f) { transform.localScale = new Vector3(Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z); } else if (moveInput < -0.01f) { transform.localScale = new Vector3(-Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z); } } }