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