PhysicsBody
структура в UnityEngine.LowLevelPhysics2D
Выполнено в:UnityEngine.Physics2DModule
Описание
Тело содержится в мире и имеет 3 степени свободы, две для положения и одна для вращения. Тело может иметь силы, моменты и импульсы, применяемые к нему. Тело имеет три различных типа:
- Статическое: Этот тип тела не движется в симуляции и ведет себя, как если бы он имел бесконечную массу, по сути неподвижный объект. Статические тела никогда не взаимодействуют с другими статическими или кинематическими телами.
- Динамическое: Этот тип тела полностью симулируется и движется в соответствии с силами и моментами, приложенными к его линейной/угловой скорости. Он может взаимодействовать со всеми другими типами тела. Он всегда имеет конечную, ненулевую массу.
- Кинематическое: Этот тип тела движется в симуляции и движется в соответствии со своими линейными/угольными скоростями и никогда не использует силы или моменты. Он взаимодействует только с Динамическими типами тела. Он ведет себя так, как будто он имеет бесконечную массу.
Свойства
| Свойство | Описание |
|---|---|
| angularDamping | Угловое демпфирование тела. Это уменьшит угловую скорость со временем. См. PhysicsBody.angularVelocity. |
| angularVelocity | Угловая скорость тела. |
| awake | Будущее состояние тела. |
| callbackTarget | Получить/Установить System.Object, на который будут отправляться обратные вызова событий для этого тела. Следует проявлять осторожность с любым System.Object, назначенным в качестве цели обратного вызова, который не является UnityEngine.Object, так как это назначение само по себе не сохранит объект живым и может стать объектом сбора мусора. Чтобы избежать этого, вы должны иметь хотя бы одну ссылку на объект в вашем коде. Это включает следующие события: — BodyUpdateEvent с вызовом IBodyUpdateCallback. |
| collisionThreshold | Порог, используемый для управления использованием непрерывного обнаружения столкновений при движении тела. Значение используется для сравнения движения тела с линейной скоростью с размерами всех фигур, добавленных к телу, масштабированных по этому порогу. Если движение превышает размеры, масштабированные по порогу, то непрерывное обнаружение столкновений используется для остановки туннелирования. Более низкие значения уменьшают расстояние, которое тело должно преодолеть, прежде чем будет использовано непрерывное обнаружение столкновений, и могут иметь значительное влияние на производительность! Более высокие значения увеличивают расстояние, которое тело должно преодолеть, прежде чем будет использовано непрерывное обнаружение столкновений. Слишком низкий порог приведет к более частому использованию непрерывного обнаружения столкновений, что повлияет на производительность, поэтому его следует ограничить только определенными телами. По умолчанию порог равен 0.5, что эквивалентно половине всех размеров фигур. Порог закреплен в диапазоне от 0.0 до 1.0, при этом 0.0 означает, что непрерывное обнаружение столкновений будет использоваться всегда. |
| constraints | Получить/Установить ограничения степеней свободы (блокировки) для тела Linear X, Linear Y и Rotation Z. |
| definition | Получить/Установить определение тела путем доступа ко всем его текущим свойствам. Это предоставляется только для удобства и не должно использоваться, когда производительность важна, так как все свойства, определенные в определении, доступны последовательно. Вы должны попытаться использовать только конкретные свойства, которые вам нужны, а не использовать эту функцию. |
| enabled | Состояние включения тела. Если false, ни само тело, ни то, что к нему прикреплено, в симуляции не участвует. |
| fastCollisionsAllowed | Рассматривайте это тело как высокоскоростной объект, который выполняет непрерывное обнаружение столкновений с динамическими и кинематическими телами, но не с другими высокоскоростными телами. Быстрые коллизионные тела следует использовать осторожно. Они не являются решением для общего непрерывного столкновения динамического с динамическим. |
| fastRotationAllowed | Это позволяет этому корпусу обходить ограничения скорости вращения. Это должно использоваться только для круглых объектов, таких как колеса, шары и т.д. |
| gravityScale | Масштабирует мировую гравитацию, которая применяется к этому телу. Установка шкалы гравитации на нуль прекращает применение любой гравитации. Аналогично, отрицательное значение инвертирует гравитацию. См. PhysicsWorld.gravity. |
| isOwned | Получить, если тело принадлежит. См. PhysicsBody.SetOwner. |
| isValid | Проверяет действительность тела. |
| jointCount | Получить количество соединений, прикрепленных к этому телу. Используйте PhysicsBody.GetJoints для получения соединений. |
| linearDamping | Линейное ослабление тела. Это уменьшит линейную скорость со временем. См. PhysicsBody.linearVelocity. |
| linearVelocity | Линейная скорость тела. |
| localCenterOfMass | Положение центра массы тела в локальном пространстве. Это можно получить как союз PhysicsBody.mass, PhysicsBody.rotationalInertia и PhysicsBody.localCenterOfMass с помощью PhysicsBody.massConfiguration. |
| mass | Рассчитанная масса тела, обычно в килограммах. Она может быть получена как объединение PhysicsBody.mass, PhysicsBody.rotationalInertia и PhysicsBody.localCenterOfMass с помощью PhysicsBody.massConfiguration. |
| massConfiguration | Конфигурация массы тела, состоящая из PhysicsBody.mass, PhysicsBody.rotationalInertia и PhysicsBody.localCenterOfMass. Обычно это рассчитывается автоматически при добавлении, удалении или изменении PhysicsShape на теле. Это автоматически изменится, если тип тела изменится, например, статическое или кинематическое тело всегда имеет нулевую массу и инерцию вращения. Индивидуальные свойства PhysicsBody.massConfiguration доступны с помощью PhysicsBody.mass, PhysicsBody.rotationalInertia и PhysicsBody.localCenterOfMass. MassConfiguration будет перезаписан при установке этого свойства или если вызван PhysicsBody.ApplyMassFromShapes или при добавлении, удалении или изменении PhysicsShape с включенным PhysicsShapeDefinition.startMassUpdate. |
| ownerUserData | Получить PhysicsUserData, который может быть использован для любой цели, обычно только владельцем. |
| position | Положение тела в мире. |
| rotation | Вращение тела. |
| rotationalInertia | Вращательная инерция тела, обычно в кг*м^2. Она может быть получена как сумма PhysicsBody.mass, PhysicsBody.rotationalInertia и PhysicsBody.localCenterOfMass с помощью PhysicsBody.massConfiguration. |
| shapeCount | Получить количество фигур, прикрепленных к этому телу. Используйте PhysicsBody.GetShapes для получения фигур. |
| sleepingAllowed | Способность тела спать. Если false, то тело никогда не будет спать и будет пробуждено. См. PhysicsBody.awake. |
| sleepThreshold | Порог, ниже которого тело будет спать, в метрах в секунду. |
| transform | Полное преобразование тела, состоящее из положения и вращения. |
| transformObject | Получить/Установить объект преобразования, связанный с телом. Это может быть использовано как преобразование записи и/или как подсказка для отладки рисунка. См. PhysicsBody.transformWriteMode. |
| transformWriteMode | Получить/Установить, как PhysicsBody.transformObject должен быть записан после завершения симулирования. Запись Transform произойдет только если она включена на мире с помощью PhysicsWorld.transformWriteMode. |
| type | Тело является одним из этих трех типов тела, Динамическим, Кинематическим или Статическим, каждый из которых определяет, как тело ведет себя в симуляции. |
| userData | Получить/Установить PhysicsUserData, который может быть использован для любой цели. Физическая система не использует эти данные, они полностью предназначены для индивидуального использования. |
| world | Получить мир, к которому прикреплено тело. |
| worldCenterOfMass | Получить местоположение центра массы тела в мировом пространстве. Это может быть доступно как союз PhysicsBody.mass, PhysicsBody.rotationalInertia и PhysicsBody.localCenterOfMass с помощью PhysicsBody.massConfiguration. |
Открытые методы
| Метод | Описание |
|---|---|
| ApplyAngularImpulse | Примените угловой импульс. Этот импульс должен использоваться для одноразовых импульсов. Если вам нужен постоянный крутящий момент, используйте вместо этого крутящий момент, который будет лучше работать с подшаговым решателем. |
| ApplyForce | Приложить силу в точке мира. Если сила не применяется в центре массы, она будет генерировать крутящий момент и влиять на угловую скорость. |
| ApplyForceToCenter | Приложить силу к центру массы. |
| ApplyLinearImpulse | Применить импульс в точке. Это немедленно изменяет скорость и также изменяет угловую скорость, если точка применения не находится в центре массы. Это следует использовать для одноразовых импульсов. Если вам нужна постоянная сила, используйте силу вместо этого, которая будет лучше работать с суб-шаговым решателем. |
| ApplyLinearImpulseToCenter | Примените импульс к центру массы. Это немедленно изменяет скорость. Это следует использовать для одноразовых импульсов. Если вам нужна постоянная сила, используйте силу вместо этого, что будет лучше работать с суб-шаговым решателем. |
| ApplyMassFromShapes | Обычно тело автоматически вычисляет MassConfiguration, используя все присоединенные формы. MassConfiguration автоматически обновляется при добавлении, удалении или изменении PhysicsShape. При добавлении многих форм в тело, вы можете остановить автоматические вычисления, тем самым улучшив производительность, отключив PhysicsShapeDefinition.startMassUpdate для каждой формы, добавляемой в тело. Этот вызов приведет к вычислению MassConfiguration с использованием текущей добавленной PhysicsShape, так что обычно вызов происходит после добавления многих форм, если PhysicsShapeDefinition.startMassUpdate отключено. В качестве альтернативы, если вы хотите назначить свой собственный MassConfiguration, то отключение автоматических вычислений также имеет смысл. В любом случае, вы должны вызвать этот метод или установить PhysicsBody.massConfiguration перед любым шагом симулирования, в противном случае PhysicsBody будет демонстрировать нестабильное поведение столкновения. MassConfiguration будет перезаписан при вызове PhysicsBody.ApplyMassFromShapes, если установлен PhysicsBody.massConfiguration или при добавлении, удалении или изменении PhysicsShape с включенным PhysicsShapeDefinition.startMassUpdate. |
| ApplyTorque | Применение крутящего момента. Это влияет на угловую скорость, не влияя на линейную скорость. |
| ClearForces | Очистить любые пользовательские силы, которые были применены к этому телу. Силы на теле автоматически очищаются при завершении этапа моделирования, однако в некоторых случаях может быть желательно очистить силы явно. |
| CreateChain | Создать Цепь, прикрепленную к этому телу. |
| CreateShape | Создайте форму круга, используя его определение по умолчанию, прикрепленное к этому телу. |
| CreateShapeBatch | Создать пакет фигур круга, прикрепленных к этому телу. |
| Destroy | Уничтожить тело, уничтожив все приложенные PhysicsShape и PhysicsJoint. Если объект принадлежит PhysicsBody.SetOwner, то вы должны предоставить ключ владельца, который он возвратил. Если этого не сделать, то будет возвращено предупреждение, и тело не будет уничтожено. |
| Draw | Отрисовывает тело, визуально представляющее его текущее состояние в мире. Используется только в Unity Editor или в сборке для разработки. |
| GetAABB | Получить мир AABB, который ограничивает все формы, присоединенные к этому телу. Если к телу не присоединено никаких форм, то возвращенный мир AABB пустой и центрирован на начале тела. |
| GetContacts | Получить все касательные контакты, в которых в настоящее время участвует это тело. Используется спекулятивное столкновение, так что некоторые контактные точки могут быть разделены, свойство доступно в предоставленном контактном многообразии. |
| GetJoints | Присоедините к телу суставы. |
| GetLocalPoint | Получает локальную точку относительно тела, для которого задана мировая точка. |
| GetLocalPointVelocity | Получить линейную скорость локальной точки, прикрепленной к телу. Обычно в метрах в секунду. |
| GetLocalVector | Получает локальный вектор на тело, для которого задан мировой вектор. |
| GetOwner | Получить объект владельца, связанный с этим телом, как указано с помощью PhysicsBody.SetOwner. |
| GetPositionAndRotation3D | Получить полное 3D положение и вращение тела при указанных TransformWriteMode и TransformPlane. Обычно используются как режим записи, так и трансформирующая плоскость мира, в котором находится тело. Это можно вызвать только при назначении PhysicsBody.transformObject. Без этого возникает исключение. См. PhysicsWorld.transformWriteMode и PhysicsWorld.transformPlane. |
| GetShapes | Получить формы, прикрепленные к этому телу. |
| GetWorldPoint | Получает мировую точку, преобразованную из локальной точки относительно тела. |
| GetWorldPointVelocity | Получить линейную скорость мировой точки, прикрепленной к телу. Обычно в метрах в секунду. |
| GetWorldVector | Получает мировой вектор, преобразованный из локального вектора относительно тела. |
| SetAndWriteTransform | Установить полное преобразование тела, состоящее из положения и вращения, а также записать в ассоциированный PhysicsBody.transformObject. PhysicsBody.transformObject не будет записываться, если он не назначен или PhysicsWorld.transformWriteMode выключены. Тело всегда будет обновляться, однако. См. PhysicsBody.transformObject. |
| SetContactEvents | Включить/отключить контактные события на всех формах, присоединенных к телу. См. PhysicsShape.contactEvents. |
| SetHitEvents | Включить/выключить события попадания на все фигуры, прикрепленные к телу. См. PhysicsShape.hitEvents. |
| SetOwner | Устанавливает (необязательно) объект владельца, ассоциированный с этим телом, и возвращает ключ владельца, который должен быть указан при уничтожении тела с помощью PhysicsBody.Destroy. Физическая система обеспечивает доступ ко всем объектам, включая возможность уничтожения их, так что эта функция может быть использована для предотвращения случайного уничтожения объектов, принадлежащих другим объектам. Вы можете установить владельца только один раз, многократные попытки вызовут предупреждение. Срок жизни указанного объекта владельца не связан с этим телом i.e. Это тело будет по-прежнему принадлежать объекту владельца, даже если оно будет уничтожено. Также допустимо не указывать объект владельца (NULL) для простого получения ключа владельца, однако это может быть полезно, если только для целей отладки и обнаружения, чтобы знать, какой объект является владельцем. |
| SetOwnerUserData | Набор PhysicsUserData, который может быть использован для любой цели, обычно только владельцем. |
| SetTransformTarget | Установить PhysicsBody.linearVelocity и PhysicsBody.angularVelocity для достижения указанного преобразования в указанное время. Результирующая трансформация будет закрытой и может не быть точной. Это идеально для кинематических тел, но будет работать с динамическими телами, если ничто не изменяет назначенные скорости. Это будет игнорироваться, если вычисленные PhysicsBody.linearVelocity и PhysicsBody.angularVelocity будут ниже PhysicsBody.sleepThreshold. Это автоматически пробудит тело, если оно спится. |
| WakeTouching | Пробудить любые тела, которые касаются этого тела через их формы. Это также работает для статических тел. |
Статические методы
| Метод | Описание |
|---|---|
| Create | Создать тело, используя PhysicsBodyDefinition.defaultDefinition в указанном мире. |
| CreateBatch | Создать партию тел в указанном мире. |
| DestroyBatch | Уничтожить партию тел, уничтожая все прикрепленные PhysicsShape и PhysicsJoint. Любые недействительные тела будут проигнорированы. Принадлежащие тела вызовут предупреждение и не будут уничтожены (см. PhysicsBody.SetOwner). |
| SetBatchForce | Применить силу к партии PhysicsBody с использованием пространства BatchForce. Если в партию передаются неверные значения, они будут просто проигнорированы. Для наилучшей производительности все тела, содержащиеся в партии, должны быть частью одного и того же PhysicsWorld. Если тела в партии не содержатся в одном и том же PhysicsWorld, партию следует сортировать по PhysicsWorld, в котором содержатся тела. |
| SetBatchImpulse | Применить импульс для партии PhysicsBody с использованием пространства BatchImpulse. Если в партию передаются неверные значения, они будут просто проигнорированы. Для наилучшей производительности все тела, содержащиеся в партии, должны быть частью одного и того же PhysicsWorld. Если тела в партии не содержатся в одном и том же PhysicsWorld, партию следует сортировать по PhysicsWorld, в котором содержатся тела. |
| SetBatchTransform | Установить преобразование для партии PhysicsBody с использованием пространства BatchTransform. Если в партию передаются неверные значения, они будут просто проигнорированы. Для наилучшей производительности все тела, содержащиеся в партии, должны быть частью одного и того же PhysicsWorld. Если тела в партии не содержатся в одном и том же PhysicsWorld, партию следует сортировать по PhysicsWorld, в котором содержатся тела. |
| SetBatchVelocity | Задайте скорость для партии PhysicsBody с использованием пространства BatchVelocity. Если неверные значения будут переданы партии, они будут просто проигнорированы. Для наилучшей производительности, тела, содержащиеся в партии, должны все быть частью одного и того же PhysicsWorld. Если тела в партии не содержатся в одном и том же PhysicsWorld, партия должна быть отсортирована по PhysicsWorld, в котором содержатся тела. |