/
darov
/
Platformer
Обзор
Документация
Войти
/
darov
/
Platformer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Assets/Scripts/AnimatorController.cs
67 строк
2 KB
Roman Danilov
comment
15 окт 2025, 07:53
15 окт 2025, 07:53
80f1cc3
Код
Авторство
О чём код?
using UnityEngine; [RequireComponent (typeof(Animator))] public class AnimatorController : MonoBehaviour { [SerializeField] private GameObject _deathAnimation; [SerializeField] private Vector2 _deathOffset; private Animator _animator; private Rigidbody2D _rigidbody; private SpriteRenderer _spriteRenderer; private IMovingDetector _walkingDetector; private IGroundCheck _ground; private IHealthChange _health; private void Start() { _animator = GetComponent<Animator>(); _rigidbody = GetComponent<Rigidbody2D>(); _spriteRenderer = GetComponent<SpriteRenderer>(); if (!TryGetComponent(out _walkingDetector)) { _walkingDetector = GetComponentInChildren<IMovingDetector>(); } TryGetComponent(out _ground); if (TryGetComponent(out _health)) { _health.HealthChanged += ShowDamageAnimation; } } private void Update() { bool isJumping = !_ground.IsGrounded; bool isFalling = isJumping && _rigidbody.velocity.y < -0.1f; _animator.SetBool(GlobalStringVariables.IsWalking, _walkingDetector.IsMoving); _animator.SetBool(GlobalStringVariables.IsJumping, isJumping); _animator.SetBool(GlobalStringVariables.IsFalling, isFalling); if (_walkingDetector.IsMoving) { _spriteRenderer.flipX = _walkingDetector.Direction < 0; } } private void OnDestroy() { _health.HealthChanged -= ShowDamageAnimation; } public void ShowDamageAnimation(float health) { if (health > 0.1f) { _animator.SetTrigger(GlobalStringVariables.IsHurt); } else { Vector2 position = (Vector2)transform.position + _deathOffset; Instantiate(_deathAnimation, position, Quaternion.identity); } } }