Триггер в проекте Unity 3D работает не постоянно

81
6

Существует римейк игры Змея. Голова змеи - триггер, а яблоко использует только коллайдер. Теперь OnTriggerEnter() не работает каждый раз - триггер змеи должен вводить несколько раз в тело яблока, чтобы получить его.

Существует код, используемый для еды:

void Head.OnTriggerEnter(Collider col)
{
if(col.CompareTag("Food"))
{
gameController.FoodEated();
}
}

public void GameController FoodEated()
{
Destroy(currentFood);
InitializeMeal();
head.GrowUp();
}

void GameController.InitializeMeal()
{
currentFood = (GameObject)Instantiate(foodPrefab, FindFreeSpace(), Quaternion.identity);
}

И есть какая-то магия: первое яблоко можно есть нормально, но змея может пройти через второе яблоко несколько раз, прежде чем яблоко будет активировано.

Я пробовал все триггерные функции, и никто из них не работает. http://www.youtube.com/watch?v=z_UQi7SGOLw - видео с ошибкой. Змея проходит через яблоко на 3-4 кадра обновления. У меня есть другая идея для реализации яблока, но я думаю, что триггер более уместен.

спросил(а) 2014-02-23T17:03:00+04:00 6 лет, 8 месяцев назад
1
Решение
90

Если ваша змея движется слишком быстро, а коллайдер яблока слишком мал, чем я предполагаю, что движок Unity иногда может пропустить столкновения.

Если на змее у вас есть компонент Rigidbody, вы можете повысить качество обнаружения столкновений, изменив "Обнаружение столкновений" с "Дискретный" на "Продолжить" или "Продолжить динамический".

ответил(а) 2014-02-23T18:07:00+04:00 6 лет, 8 месяцев назад
41

Как вы можете видеть на видео выше, моя змея растет, создавая tailelement в текущей transform.position. TailElement начинает движение, когда расстояние между двумя последними элементами хвоста больше или равно 1.


Я просто попытался уменьшить радиус коллайдера головы на 10%, и теперь хвостовой элемент не является коллайдером во время движения змеи. Теперь он работает нормально.

ответил(а) 2014-02-24T08:22:00+04:00 6 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема