OnTriggerEnter срабатывает несколько раз

Я делал монетки в своей игре и столкнулся с такой проблемой - у моего персонажа несколько бокс коллайдеров и поэтому когда персонаж касается монеты функция OnTriggerEnter срабатывает несколько раз и начисляется несколько монет.

Вот мой код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class CoinPickUP : MonoBehaviour
{
    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("coin"))
        {
            int coins = PlayerPrefs.GetInt("coins");
            PlayerPrefs.SetInt("coins", ++coins);
            Destroy(other.gameObject);
        }
    }
}

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

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

В принципе, гуглится несколько решений, но мне кажется самое элегантное - это добавить флаг bool collected = false; в объект Coin, выставлять его после сбора монеты в true и проверять в OnTriggerEnter, что он не выставлен. Если монета уже собрана (collected == true), то не заходить в логику if-а и не увеличивать счётчик собранных монет. Видимо, Destroy отрабатывает позже, чем успевает сработать несколько раз OnTriggerEnter. События помещаются в очередь и отрабатывают в порядке очерёдности, если триггер уже в очереди несколько раз есть, то он отработает раньше, чем выполнится Destroy.

→ Ссылка