Вы запускаете свою сопрограмму всякий раз, когда что-то входит в триггерный коллайдер.Попробуйте проверить, является ли введенный объект объектом, который вы ищете.Если это ваш игрок и объект помечен как «Игрок», вы можете проверить это:
private void OnTriggerEnter(Collider other)
{
if(other.CompareTag("Player"))
{
StartCoroutine(YourCoroutine());
}
}
Еще одной причиной может быть обнаружение столкновения Unity.Иногда это может быть проблематично, поэтому большую часть времени вам лучше проверить, сталкивались ли уже объекты.
Один из способов решения этой проблемы, в частности с использованием сопрограмм, состоит в сохранении сопрограммы в переменной в вашем скрипте.и проверьте, если он уже запущен.Примерно так:
private Coroutine coroutine;
private void OnTriggerEnter(Collider other)
{
if(coroutine == null)
{
coroutine = StartCoroutine(YourCoroutine());
}
}
Затем установите значение null в OnTriggerExit или что-то в этом роде:
private void OnTriggerExit(Collider other)
{
coroutine = null;
}
Я бы порекомендовал также проверить тег в этой реализации:
private Coroutine coroutine;
private void OnTriggerEnter(Collider other)
{
if(coroutine == null && other.CompareTag("Player"))
{
coroutine = StartCoroutine(YourCoroutine());
}
}