Как отнять здоровье у врага через 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.
И подскажите ещё, насколько колхозно я сделал атаку через событие и что можно изменить?