Запрет на подбор здоровья Unity3D

Подскажите пожалуйста, как сделать запрет на подбор хилок когда у игрока максимальное количество хп. Новичок в Unity, поэтому строго не судите) Код ниже:

PlayerHealth.cs

public void HealPlayer(int healAmount)
{
    
    currentHealth += healAmount;
    
    if (currentHealth > maxHealth)
    {
        currentHealth = maxHealth;
    }
}

HealthPickup.cs

private void OnTriggerEnter(Collider other) 
{
    if (other.tag == "Player")
    {
        PlayerHealth.instance.HealPlayer(healAmount);
        Destroy(gameObject);
    }
}

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

Автор решения: Yaroslav

Вопрос по сути с какой стороны проверять, правильный ответ ни с какой. То что хилка подбирает сама себя это странно. Проверкой по тегу вообще не пользуются поскольку это строковый летирал, теоретический агент ошибки которую потом трудно искать.

Вряд ли персонаж в игре подбирает одни только хилки, скорее всего еще есть манетки, предметы и т.д. Нужен какой нибудь суперкласс PickableObject от которого наследуются все подбираемые объекты.

public class PickableObject: MonoBehaviour
{
    [SerializeField] private GameObject _pickEffect;

    public void Pick ()
    {
        if (_pickEffect != null)
            Instantinate(_pickEffect);
        Destroy(gameOvject);
    }
}

public class PickableHealth : PickableObject
{
    [SerializeField] private int _amount;

    public int Amount => _amount;
}

На игроке специальный класс подбиратель:

public class ObjectPicker : MonoBehaviour
{
    private Health _health;

    private void OnTriggerEnter (Collider other) 
    {
        // проверяем по типу или интерфейсу
        if (TryGetComponent(out PickableObject target))
            PickObject(target); // перегрузка методов
    }

    public void Initialize (Health health) {
    {
        _health = health;
    }

    // если подобранный объект является хилкой сработает этот метод
    private void PickObject (PickableHealth target)
    {
        if (_health.Current < _health.Max)
        {
            _health.Restore(target.Amount);
            target.Pick();
        }
    }

    // если подобранный объект является валютой сработает этот метод
    private void PickObject (PickableValuta target) { }

    // в любом другом случае сработает метод с базовым типом
    private void PickObject (PickableObject target) { }
}

public class Health 
{
    public event Action<int> Changed;
    public int Current { get; private set; }
    public int Max { get; private set; }
    
    public void SetMax (int amount)
    {
        Max = amount;
        Current = Max;
    }

    public void Restore (int amount)
    {
        SetCurrent(Current+amount);
    }

    public void Lose (int amount)
    {
        SetCurrent(Current-amount);
    }

    privat void SetCurrent (int amount)
    {
        Current = Mathf.Clamp(amount, 0, Max);
        Changed?.Invoke(Current);
    }
}
→ Ссылка