OnTriggerEnter стреляет слишком поздно - PullRequest
3 голосов
/ 28 мая 2019

Я пытаюсь сделать липкую гранату, отключив ее твердое тело при столкновении, используя OnCollisionEnter(). Однако OnCollisionEnter() стреляет, когда явно нет столкновений, как вы можете видеть на этом изображении: https://imgur.com/w9KMEff. Это заставляет мою гранату зависать в воздухе. Я подозреваю, что это связано с отсутствием синхронизации между физическим циклом и циклом рендеринга. Кроме того, моя стандартная «нелипкая» граната использует ту же модель и работает отлично.

Я уже пробовал следующее:

  • Убедитесь, что нет других коллайдеров, которые могли бы вызвать мою гранату "держаться в воздухе"

  • Используйте взамен OnTriggerEnter(). Результат немного лучше, но проблема в том, что он стреляет слишком поздно, только когда граната оказывается внутри препятствия или врага.

  • Добавление обнаружения твердого тела и непрерывного столкновения ко всем объектам

  • Tweak PhysicsManager.DefaultContactOffset от 0,01 до 0,001, как рекомендует Eliasar

  • Переключение с «PCM» на «Генерация устаревших контактов»

Ничего из этого не сработало, поэтому я немного отчаялся. Заранее спасибо за помощь!

Код, который я использую для столкновения с гранатой при столкновении:

void OnCollisionEnter(Collision c) {
   rigidbody.isKinematic = true;
   transform.parent = c.transform;
}

1 Ответ

3 голосов
/ 28 мая 2019

PhysicsManager.DefaultContactOffset может быть установлено слишком высоко для масштаба вашего объекта

Согласно этому сообщению форума Unity , ваше физическое поле может быть слишком высоким, если масштабы ваших объектов слишком малы.OnCollisionEnter выстрелит во время такта Физики и может обновить позицию вашей гранаты на кадр раньше, чем вы ожидаете.Это объяснило бы, почему оно будет находиться вне точки контакта, тогда как OnTriggerEnter обработает 1 кадр позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...