Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Физика в Unity 5.0

В Unity 5.0 есть обновление до PhysX3.3 SDK. Прежде чем предпринимать какие-либо действия в своих проектах 4.x, внимательно просмотрите этот пост в блоге. Это должно дать вам представление о том, чего ожидать от новой кодовой базы: Высокопроизводительная физика в Unity 5. Обратите внимание, что PhysX3 не на 100% совместим с PhysX2 и требует некоторых действий от пользователя при обновлении.

Общий обзор обновлений

Можно ожидать, что физика Unity 5.0 будет работать в 2 раза быстрее, чем в предыдущих версиях. Большинство компонентов, с которыми вы были знакомы, все еще там, и вы обнаружите, что они работают, как и раньше. Конечно, некоторые варианты поведения было невозможно получить такими же, а некоторые были просто странными, вызванными ограничениями ранее существовавшей кодовой базы, поэтому нам пришлось внести изменения. Две области, которые претерпели наиболее значительные изменения, — это компонент Cloth и компонент WheelCollider. Мы включаем раздел о каждом из них ниже. Затем во всем физическом коде есть небольшие изменения, которые вызывают несовместимость.

Изменения, которые могут повлиять на проекты:

Адаптивная сила теперь отключена по умолчанию

Адаптивная сила была введена, чтобы помочь с моделированием больших стеков, но оказалось, что она хороша только для демонстраций. В реальных играх это приводило к неправильному поведению. Вы можете включить его в свойствах физики редактора: Edit -> Project settings -> Physics -> Enable adaptive force.

Столкновения гладких сфер удалены как с ландшафтом, так и с сетками.

PhysX3 имеет функцию, которая решает ту же проблему, и ее больше нельзя переключать, поскольку она считается решением без серьезных недостатков.

Пружины выставляют большие амплитуды с PhysX3.

возможно, вы захотите настроить параметры пружины после обновления.

Настройка материала Terrain Physics изменилась

Используйте TerrainCollider.sharedMaterial и TerrainCollider.material, чтобы указать физический материал для terrainпейзажа в вашей сцене. Игровой объект Terrain добавляет в вашу сцену большую плоскую плоскость, и вы можете использовать окно Terrain Inspector для создания подробного ландшафта. Подробнее
См. в Словарь
. Старый способ установки физического материала через TerrainData больше не будет работать. В качестве бонуса теперь вы можете указать материалы физики ландшафта для каждого коллайдераневидимой формы, которая используется для обработки физических столкновений для объект. Коллайдер не обязательно должен быть точно такой же формы, как сетка объекта — грубое приближение часто бывает более эффективным и неразличимым в игровом процессе. Подробнее
См. в Словарь
.

Изменены формы и размах:

  • Очистка формы сообщает обо всех фигурах, с которыми они сталкивались (т. е. CapsuleCast и SphereCast будут возвращать все формы, с которыми они сталкивались, даже те, которые полностью содержат примитив).
  • Raycasts отфильтровывает фигуры, содержащие источник raycast.

События составного коллайдера:

При использовании составных коллайдеров OnCollisionEnter теперь вызывается один раз для каждой пары контактов

Триггеры должны быть выпуклыми:

Теперь у вас могут быть триггеры только на выпуклых формах (ограничение PhysX):

  • TerrainCollider больше не поддерживает флаг IsTrigger
  • MeshCollider может иметь IsTrigger, только если он выпуклый

Динамические тела должны быть выпуклыми:

Динамические тела (т. е. те, к которым Rigidbody прикреплено с Kinematic = false) больше не могут иметь вогнутую сеткуосновной графический примитив Единство. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
См. в коллайдерах Словарь
(ограничение PhysX).

Если вы хотите иметь столкновенияСтолкновение происходит, когда физический движок обнаруживает, что коллайдеры двух игровых объектов соприкасаются или перекрываются , когда хотя бы один имеет компонент Rigidbody и находится в движении. Подробнее
См. в Словарь
с вогнутыми сетками, вы можете иметь их только на статических коллайдерах и кинематические тела

Рэгдолл суставы:

Скорее всего, настройки суставов для рэгдоллов потребуют доработки.

Эти рекомендации относятся к соединениямФизический компонент, обеспечивающий динамическую связь между компонентами Rigidbody, обычно допускающий некоторую степень движения, например петля. Подробнее
См. в Словарь
в целом.

Последнюю версию этого руководства см. на странице Стабильность суставов и рэгдолл.

  • Избегайте малых углов «Angular Y Limit» и «Angular Z Limit». В зависимости от вашей установки минимальные углы должны составлять от 5 до 15 градусов, чтобы быть стабильным. Вместо использования малого угла попробуйте установить угол равным нулю. Это заблокирует ось и обеспечит стабильное моделирование.

  • Установите для параметра «Включить предварительную обработку» значение false (флажок не установлен). Отключение предварительной обработки может помочь против «взрыва» суставов. Соединения могут «взорваться», если они вынуждены оказаться в ситуации, в которой невозможно удовлетворить ограничениям соединения. Это может произойти, если соединенные твердые тела разрываются на части из-за статической геометрии столкновения, например, создание тряпичной куклы частично внутри стены.

  • Стабильность или растяжение рэгдоллов. Если рэгдоллы попадут в экстремальные условия, например, частично появляясь внутри стены или толкнув их с большой силой, решатель соединений не сможет удерживать твердые тела вместе. Это может привести к растяжению или «облаку частей тела». Включите проецирование на суставы с помощью «ConfigurableJoint.projectionMode» или «CharacterJoint.enableProjection».

  • Если тела, соединенные суставами, дрожат, попробуйте увеличить Edit->Project Settings->Physics->“Solver Iteration Count”. Попробуйте от 10 до 20.

  • Никогда не используйте прямой доступ к преобразованию с кинематическими телами, соединенными с другими телами. При этом пропускается шаг, на котором PhysX вычисляет внутренние скорости соответствующих тел, и, таким образом, решатель выдает неприятные результаты. Мы видели несколько 2D-проектов, использующих прямой доступ к преобразованию для переворачивания символов через изменение transform.direction в корневом компоненте рига. Это ведет себя намного лучше, если вместо этого вы используете MovePosition / MoveRotation / Move.

Ограничения Rigidbody применяются в локальном пространстве

Механизм блокировки, который мы использовали в Unity 4, в основном отбрасывал изменения в заблокированных поворотах и ​​сбрасывал угловые скорости на этапе пострешателя. Это работало в основном нормально, за исключением того, что были проблемы с телами, которые не могли заснуть, поскольку решатель хотел регулировать повороты в каждом кадре; и несколько связанных случаев были замечены за эти годы. При работе над интеграцией PhysX3 мы использовали эту новую функцию PhysX 3.3, где мы можем установить бесконечные компоненты тензора инерции для заблокированных вращательных степеней свободы. Теперь это поддерживается в решателе, поэтому тело теперь будет засыпать соответствующим образом, но, поскольку это инерция, она применяется в локальных координатах.

Колесный коллайдер

Новый WheelCollider основан на PhysX3 Vehicles SDK, который представляет собой совершенно новую библиотеку моделирования транспортных средств по сравнению с кодом, который мы использовали для PhysX2.

Подробнее о новом WheelCollider читайте здесь.

Ткань

В Unity 5 используется полностью переписанный решатель ткани из нового PhysX SDK. Этот решатель ткани был разработан с учетом одежды персонажей и является большим улучшением по сравнению со старой версией с точки зрения производительности и стабильности. Unity 5 заменяет компоненты SkinnedCloth и InteractiveCloth в Unity 4 одним компонентом Cloth, который работает в сочетании с SkinnedMeshRenderer. Функциональность аналогична предыдущему компоненту SkinnedCloth, но теперь можно назначать SkinnedMeshRenderer произвольные меши без скинов, поэтому вы по-прежнему можете обрабатывать симуляцию ткани на любом произвольном меше.

Однако некоторые функции, которые были доступны в старой версии InteractiveCloth, теперь больше не поддерживаются новой версией PhysX, поскольку их сложно реализовать с хорошей производительностью. В частности:

  • Вы больше не можете использовать ткань для столкновения с произвольной геометрией мира
  • разрыв больше не поддерживается
  • вы больше не можете надавливать на ткань
  • вы больше не можете прикреплять ткань к коллайдерам или заставлять ткань воздействовать на жесткие телаКомпонент, который позволяет воздействовать на GameObject моделируемой гравитацией и другими силами. Подробнее
    См. в Словарь
    в sceneСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
    См. в Словарь
    .
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3