Как предотвратить прохождение Ridigbody сквозь стены?

У меня есть корабль Rigidbody. На корабле есть MeshCollider. Этот коллайдер установлен как Convex.

У меня есть основание, это программно созданный Mesh. На этой сетке естьMeshCollider. Этот коллайдер не установлен как выпуклый.

В большинстве случаев это работает. Я не проваливаюсь сквозь пол. Примерно 40% времени я могу проезжать сквозь стены.

Пытаясь решить эту проблему, для каждой секции стены я добавил дочерний элемент GameObject, помеченный как статический. На этом GameObject есть BoxCollider. Я сделал коллайдер на 0,1 больше, чем часть стены. Это означает, что коллайдеры перекрываются, и не должно быть промежутка, через который можно провалиться.

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

Что мне делать, чтобы я не мог проезжать сквозь стены?

введите здесь описание изображения

Я пробовал:

  • Добавляем Rigidbody на землю, помеченный как кинематический. Для этого я удалил все MeshCollider и использовал все BoxCollider. Мне пришлось использовать все BoxCollider, так как у вас может быть Convex Rigidbody. Это не решило проблему.

  • Убрал MeshCollider из плеера и использую одиночный BoxCollider. На данный момент в сцене больше нет MeshCollider. Это не решило проблему.

  • Оба Rigidbodys настроены на постоянное обнаружение столкновений.

Мне интересно, работает ли вообще система UNity3d Physics: /


person Justin808    schedule 08.03.2016    source источник
comment
Как вы двигаете корабль? Вы напрямую меняете положение корабля или используете метод Rigidbody, такой как AddForce? Кстати, не волнуйтесь, движок 3D-физики Unity Nvidia PhysX на самом деле очень надежен. К сожалению, есть много вещей, которые могут пойти не так, как надо, из-за ошибок пользователя (такое случается со всеми нами).   -  person AquaGeneral    schedule 09.03.2016
comment
@AquaGeneral - Я использую Rigidbody.MovePosition и Rigidbody.MoveRotation, чтобы двигать корабль.   -  person Justin808    schedule 09.03.2016


Ответы (2)


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

  1. Если вы хотите использовать Коллайдеры сетки с выпуклым элементом, к нему необходимо прикрепить RigidBody. Прикрепите RigidBody к обоим объектам.

  2. Поскольку вы создаете стены с помощью кода, убедитесь, что стена, которую вы назначаете Mesh Collider, имеет ‹= 255 треугольников. Convex Mesh Collider < strong> limited до 255 треугольников. Если треугольники стены> 255, выпуклость не удастся.

  3. Поскольку иногда это срабатывает, а в других случаях - нет, измените Обнаружение столкновений с жесткими телами как стену, так и корабль на Непрерывный динамический.

  4. Используйте Составные коллайдеры. Удалите Mesh Collider на корабле и используйте несколько Box Collider вокруг вашего корабля, чтобы получить желаемое ощущение того, что вы хотите.

person Programmer    schedule 08.03.2016

Настройте фиксированный и максимально допустимый временной интервал. Я установил для параметра «Фиксированная отметка времени» значение 0.0005.

http://docs.unity3d.com/Manual/class-TimeManager.html

person Justin808    schedule 10.03.2016