Как отнять здоровье у врага через UnityEvent?

Столкнулся с такой проблемой, что не работает UnityEvent должным образом. (Ну или я чего-то не пойму). Есть враги, и я хочу через UnityEvent убавлять им здоровье, если игрок точкой атаки попадает по колайдеру врага. Сделал вот такой код у игрока:

    [SerializeField] private LayerMask _enemyLayers;
    [SerializeField] private Transform _attackPoint;
    [SerializeField] private UnityEvent<int, Collider2D> _hitEnemy;

    [SerializeField] private float _rangeHit = 0.2f;

    private int _hitDamage = 20;



    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Attack();
        }
    }

    private void Attack()
    {
        Collider2D[] colliders = Physics2D.OverlapCircleAll(_attackPoint.position, _rangeHit, _enemyLayers);

        foreach (Collider2D collider in colliders)
        {
            _hitEnemy?.Invoke(_hitDamage, collider);
            Debug.Log(collider);
        }
    }

Вот такой у врага:

    [SerializeField] private Collider2D _currentCollider;

    [SerializeField] private int _health = 100;


    public void TakeDamage(int damage, Collider2D collider)
    {
        if (collider == _currentCollider)
            _health -= damage;

        if (_health <= 0)
            Die();
    }

    private void Die()
    {
        Destroy(gameObject);
    }

В самом юнити указал объект врага и вызываемое действие. Запускаю сцену, и после атаки ничего не происходит(здоровье у врага не убавляется). Но когда заместо UnityEvent делаю public Action<int, Collider2D> _hitEnemy; и в коде врага подписываюсь на событие и при смерти отписываюсь, всё работает нормально... Но я хотел бы, чтоб код врага не содержал ссылки на скрипт игрока, и решил запилить через UnityEvent. И подскажите ещё, насколько колхозно я сделал атаку через событие и что можно изменить?


Ответы (0 шт):