Physics
Unity Manual > User Guide > Creating Gameplay > Physics

Physics

Unity использует движок Ageia PhysX для симуляции физики. Это хороший движок.

Basics

Чтобы подчинить объект законам физики, просто присвойте ему компонент Rigidbody. Тогда на объект будет действовать гравитация и он будет сталкиваться с другими объектами.

Rigidbodies

Rigidbodies используются для объектов, с которыми игрок может физически взаимодействовать (толкать, например). К Rigidbodies можно добавить узлы (Joints), чтобы получить более сложные объекты (например, дверь или башенный кран).

Используя Rigidbodies, можно создать автомобиль. Четыре колеса с Colliders, Rigidbody на кузов и скрипт, подающий силы на колёса в соответствии с сигналами входа.

Можно создать самолёт, применив силы (forces) к Rigidbody из скрипта. Или создать робота, добавив узлы и применив к ним силы.

Rigidbody очень часто используется в комбинации с примитивными коллайдерами (primitive colliders).

 

Kinematic Rigidbodies

Kinematic Rigidbodies не подвержены влиянию сил, гравитации и столкновений. Ими управляют, устанавливая их положение и угол поворота или анимируя их, но все же они могут взаимодействовать с другими некинематическими Rigidbodies (простой пример: есть анимация бега — это кинематика, есть Ragdoll — это не кинематика, а физика.)

Kinematic Rigidbodies используются в трех целях:
* Иногда нужно, чтобы объект находился под контролем физики, но в некоторых ситуациях им нужно управлять явно из скрипта или с помощью анимации. Например вы могли сделать анимируемый персонаж, к костям которого применёны Rigidbodies, которые в свою очередь связаны с узлками (joints) для использования в качестве Ragdoll. Большую часть времени персонаж находится под контролем анимации, таким образом вы делаете Kinematic Rigidbody. Но когда персонаж убит, нужно, чтобы он превратился в Ragdoll и был подчинён физике. Чтобы достигнуть этого, вы просто отключаете isKinematic.
* Kinematic Rigidbodies лучше взаимодействуют с другими Rigidbodies. Например, если у вас есть анимируемая платформа, и вы хотите поместить некоторые боксы Rigidbody наверх, вы должны сделать платформу Kinematic Rigidbody вместо того, чтобы сделать только коллайдеры без Rigidbody.
* You might want to have a Kinematic Rigidbody that is animated and have a real Rigidbody follow it using one of the available Joints.

Static Colliders

Статические rоллайдеры (Static Colliders) используются для геометрии уровня, которая мало двигается. Вы добавляете Mesh Collider к вашим уже существующим графическим мешам (еще лучше использоватьт флажок Generate Colliders в настройках импорта). Вы можете все же перемещать статические коллайдеры, но если вы перемещаете их много, лучше добавить Kinematic Rigidbody. Есть две причины, по которым стоит превратить статический коллайдер в Kinematic Rigidbody:
1. Kinematic Rigidbodies активируют другие Rigidbodies при столкновении с ними.
2. Kinematic Rigidbodies прикладывают силу трения к Rigidbodies соприкасающимся с ними.

Character Controllers

Character Controllers используется для создания гуманоидных персонажей. Это может быть и главный герой и противник; в платформере от третьего лица или в шутере от первого.

Character Controllers не подчиняется правилам физики и это нормально (например, в Doom игрок перемещается со скоростью 90 миль в час, останавливается за один кадр и поворачивается с неверноятной быстротой). Вместо этого Character Controllers проверяет и обнаруживает столкновения, чтобы персонаж мог скользить вдоль стен, идти по лестнице и т. п.

Character Controllers не подвержен воздействию сил, но он может толкать Rigidbodies, вызывая силу из скрипта. Обычно все гуманоидные персонажи используют Character Controllers.

Character Controllers являются совершенно нефизическими, таким образом если вы хотите применить реальную физику — колебание веревок, падение тяжелых камней — вы должны использовать Rigidbody для вашего персонажа, это позволит использовать узлы (joints) и силы( forces). Но настраивая Rigidbody, принимайте во внимание, что игрок будет испытывать некоторые проблемы, так как в силу применения Character Controllers он будет зачастую вести себя не в соответствии с физическими ограничениями.

TIPS
Не допускайте, чтобы Rigidbody был присвоен одновременно родительскому и дочернему объектам.
Не масштабируйте родителя rigidbody.

Constant Force

Constant Force - быстрый способ добавить постоянные силы к Rigidbody. Это хорошо работает для таких объектов, как ракеты, если вы не хотите, чтобы объект стартовал с большой скоростью, но зато имел ускорение.


Ракета, движимая Constant Force.

Properties

Force Вектор силы в мировых координатах.
Relative Force Вектор силы в локальных координатах.
Torque Вектор вращающего момента в мировых координатах. Объект будет вращаться вокруг этого вектора.
Relative Torque Вектор вращающего момента в локальных координатах. Объект будет вращаться вокруг этого вектора.

Details

Предположим, что нужно сделать ракету, которая будет продвигаться вперёд с ускорением. Установите необходимое значение Relative Force по оси Z и в настройках Rigidbody отключите гравитацию. Также установите ограничение максимальной скорости через свойство Drag (обратная пропорция).

Hints

Чтобы создать движение объекта вверх, добавьте к нему компонент Constant Force с положительным значением Force по оси Y.
Чтобы создать движение объекта вперёд, добавьте к нему компонент Constant Force с положительным значением Force по оси Z.

Sphere Collider

Sphere Collider — базовый коллайдер (collider) в форме сферы.


Группа Sphere Colliders.

Properties

Material Ссылка на физический материал (Physic Material) определяет свойства этого коллайдера при взаимодействии с другими.
Is Trigger Если включено коллайдер будет использоваться для событий по триггерам и будет игнорироваться физикой.
Radius Размер коллайдера.
Center Позиция коллайдера в локальной системе координат объекта.

Details

Sphere Collider может изменять масштаб только по всем осям одновременно.

Стандартный Sphere Collider.

Коллайдеры работают с Rigidbody для реализации физики. Rigidbodies позволяют объектам контроллироваться физикой, а коллайдеры позволяют объектам сталкиваться с другими объектами. Коллайдеры могут быть добавлены объеткам независимо от Rigidbodies. Колдайдеры не нуждаются в Rigidbodies, но Rigidbodies для своей корректной работы как правило требуют коллайдеров.

When a collision between two Colliders occurs and if at least one of them has a Rigidbody attached, three collision messages are sent out to the objects attached to them. These events can be handled in scripting, and allow you to create unique behaviors with or without making use of the built-in Ageia's physX engine.

Triggers

Есть ещё один способ применения коллайдеров — использование их в качестве триггеров. Триггер — механизм, активирующий то или иное событие (появление текста, открытие двери, взрыв и т. п.) В данном случае, события будут активироваться при столкновении объетка с коллайдером.
Для преобразования коллайдера в триггер достаточно поставить галочку напротив «IsTrigger» в его свойствах.

Be aware that in order for two Triggers to send out trigger events when they collide, one of them must include a Rigidbody as well. For a Trigger to collide with a normal Collider, one of them must have a Rigidbody attached. For a detailed chart of different types of collisions, see the collision action matrix in the Advanced section below.

Friction and bouncyness

Свойства трения (frictio), упругости (bouncyness) и жёсткости (softness) определяются в физическом материале (Physic Material). Standart Assets содержат несколько таких материалов, выбираемых в выпадающем списке Physic Material в Inspector коллайдера. Можно создавать собственные материалы

Compound Colliders

Составной коллайдер — это комбинация примитивных коллайдеров, дествующая как один единый коллайдер. Составные коллайдеры используются, когда имеется меш сложной формы, но невозможно использование Mesh Collider. Для создания составного коллайдера, создайтё дочерние объекты для обрабатываемого меша и добавьте примитивный коллайдер каждому из этих объектов. Это позволит манипулировать каждым коллайдером независимо от других.


Пример составного коллайдера.

В примере, проиллюстрированном выше, окружающей среде привоен Mesh Collider. Mesh Collider лучше всего работает на ландшафте и окружении, имеющем неправильную форму. Объекту gun_model присвоен Rigidbody и несколько примитивных коллайдеров в виде дочерних объектов. Когда Rigidbody двигается под действием сил, дочерние коллайдеры двигаются вместе с ним. Когда примитивные коллайдеры сталкиваются с Mesh Collider окружения, Rigidbody изменит путь движения в соответствии с применёнными силами и взаимодействием дочерних коллайдеров с другими коллайдерами сцены.

Изначально Mesh Collider не могут сталкиваться друг с другом. Они обретают эту способность, если им в свойствах активировать пункт Convex.
Традиционно Mesh Collider применяются для всех статичных фоновых объектов, а примитивные коллайдеры — для всех передвигаемых объектов.

Hints

Чтобы добавить несколько коллайдеров к объекту, создайте несколько дочерних объектов и присвойте каждому по коллайдеру.
Гизмо в Scene View показывают границы коллайдера.
Колайдеры стараются соответствовать масштабу объекта. Если к объекту применялось неоднородно (non-uniform) масштабирование, то ему подойдёт только Mesh Collider.
If you are moving an object through its Transform component but you want to receive Collision/Trigger messages, you must attach a Rigidbody to the object that is moving.If you make an explosion, it can be very effective to add a rigidbody with lots of drag and a sphere collider to it in order to push it out a bit from the wall it hits.

Box Collider

Box Collider — это базовый примитивный коллайдер в форме куба.


Груда Box Colliders.

Properties

Material Ссылка на физический материал (Physic Material) определяет свойства этого коллайдера при взаимодействии с другими.
Is Trigger Если включено коллайдер будет использоваться для событий по триггерам и будет игнорироваться физикой.
Size Размер коллайдера.
Center Позиция коллайдера в локальной системе координат объекта.

Details

Box Collider может масштабироваться, принимая форму любого параллелограмма.
Его можно успешно использовать в дверях, окнах, для ragdoll человеческого тела, для автомобильных корпусов, ящиков и т. п.


Стандартный  Box Collider.

Colliders work with Rigidbodies to bring physics in Unity to life. Whereas Rigidbodies allow objects to be controlled by physics, Colliders allow objects to collide with each other. Colliders must be added to objects independently of Rigidbodies. A Collider does not necessarily need a Rigidbody attached, but a Rigidbody must be attached in order for the object to move as a result of collisions.

When a collision between two Colliders occurs and if at least one of them has a Rigidbody attached, three collision messages are sent out to the objects attached to them. These events can be handled in scripting, and allow you to create unique behaviors with or without making use of the built-in Ageia's physX engine.

Triggers

Есть ещё один способ применения коллайдеров — использование их в качестве триггеров. Триггер — механизм, активирующий то или иное событие (появление текста, открытие двери, взрыв и т. п.) В данном случае, события будут активироваться при столкновении объетка с коллайдером.
Для преобразования коллайдера в триггер достаточно поставить галочку напротив «IsTrigger» в его свойствах.

Be aware that in order for two Triggers to send out trigger events when they collide, one of them must include a Rigidbody as well. For a Trigger to collide with a normal Collider, one of them must have a Rigidbody attached. For a detailed chart of different types of collisions, see the collision action matrix in the Advanced section below.

Friction and bouncyness

Свойства трения, упругости и жёсткости определяются в физическом материале (Physic Material). Standart Assets содержат несколько таких материалов, выбираемых в выпадающем списке Physic Material в Inspector коллайдера. Можно создавать собственные материалы.

Mesh Collider

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


Использование Mesh Collider для геометрии уровня.

Properties

Material Ссылка на физический материал (Physic Material) определяет свойства этого коллайдера при взаимодействии с другими.
Is Trigger Если включено коллайдер будет использоваться для событий по триггерам и будет игнорироваться физикой.
Mesh Ссылка на меш, на который шьётся коллайдер.
Smooth Sphere Collisions Сглаживает коллайдер. Рекомендуется для мешей с гладкими поверхностями (например, сфера или гладкий ландшафт).
Convex Если включено, Mesh Collider может сталкиваться с другими себе подобными. Convex Mesh Colliders ограничены 255 треугольниками.

Details

Mesh Colliders строятся исходя из меша, прикреплённого к объекту, и задают позицию и масштаб на основании свойств компонента Transform.

Collision meshes use backface culling. If an object collides with a mesh that will be backface culled graphically it will also not collide with it physically.

Mesh Colliders имеют некоторые ограничения. Обычно они не могут сталкиваться между собой (за исключением тех, у которых активировано свойство Convex).

Коллайдеры работают вместе с Rigidbodies для реализации физики. Rigidbodies позволяют объектам подчиняться законами физики, а коллайдеры — сталкиваться объектам между собой. Коллайдеры могут быть добавлены объекту независимо от Rigidbodies. Коллайдеры не требуют Rigidbodies, но Rigidbodies обычно для корретной работы нуждаются в коллайдерах.

When a collision between two Colliders occurs and if at least one of them has a Rigidbody attached, three collision messages are sent out to the objects attached to them. These events can be handled in scripting, and allow you to create unique behaviors with or without making use of the built-in Ageia's physX engine.

Triggers

Есть ещё один способ применения коллайдеров — использование их в качестве триггеров. Триггер — механизм, активирующий то или иное событие (появление текста, открытие двери, взрыв и т. п.) В данном случае, события будут активироваться при столкновении объетка с коллайдером.
Для преобразования коллайдера в триггер достаточно поставить галочку напротив «IsTrigger» в его свойствах.

Be aware that in order for two Triggers to send out trigger events when they collide, one of them must include a Rigidbody as well. For a Trigger to collide with a normal Collider, one of them must have a Rigidbody attached. For a detailed chart of different types of collisions, see the collision action matrix in the Advanced section below.

Friction and bouncyness

Свойства трения, упругости и жёсткости определяются в физическом материале (Physic Material). Standart Assets содержат несколько таких материалов, выбираемых в выпадающем списке Physic Material в Inspector коллайдера. Можно создавать собственные материалы.

Hints

Mesh Colliders не могут сталкиваться между собой без соблюдения дополнительных условий. Поэтому они лучше всего подходят для второстепенных фоновых объектов.
Convex Mesh Collider ограничен 255 треугольниками.
Примитивные коллайдеры лучше подходят для объектов, подвластных физике.
When you attach a Mesh Collider to a GameObject, its Mesh property will default to the mesh being rendered. You can change that by assigning a different Mesh.
Для добавления нескольких коллайдеров к объекту, создайте дочерние объекты и присоедините по коллайдеру к каждому из них.
Гизмо в Scene View показывают границы коллайдера.
Колайдеры стараются соответствовать масштабу объекта. Если к объекту применялось неоднородно (non-uniform) масштабирование, то ему подойдёт только Mesh Collider.
If you are moving an object through its Transform component but you want to receive Collision/Trigger messages, you must attach a Rigidbody to the object that is moving.

Advanced

Collider combinations

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

Static Collider

Статичные коллайдеры — это объекты, не имеющие Rigidbody, но имеющие коллайдер. Они не перемещаются или перемещаются мало. Обычно это геометрия окружения. Статичные коллайдеры не перемещаются при столкновении с Rigidbody.

Rigidbody Collider

Это объекты, содержащие Rigidbody и коллайдер одновременно. Они полностью подчиняются физике через скриптовые силы или столкновения. Они могут сталкиваться с объектами, содержащими лишь один коллайдер. Это основной тип коллайдера.

Kinematic Rigidbody Collider

This GameObject contains a Collider and a Rigidbody which is marked IsKinematic. To move this GameObject, you modify its Transform Component, rather than applying forces. They're similar to Static Colliders but will work better when you want to move the Collider around frequently. There are some other specialized scenarios for using this GameObject.

This object can be used for circumstances in which you would normally want a Static Collider to send a trigger event. Since a Trigger must have a Rigidbody attached, you should add a Rigidbody, then enable IsKinematic. This will prevent your Object from moving from physics influence, and allow you to receive trigger events when you want to.

Kinematic Rigidbodies can easily be turned on and off. This is great for creating ragdolls, when you normally want a character to follow an animation, then turn into a ragdoll when a collision occurs, prompted by an explosion or anything else you choose. When this happens, simply turn all your Kinematic Rigidbodies into normal Rigidbodies through scripting.

If you have Rigidbodies come to rest so they are not moving for some time, they will "fall asleep". That is, they will not be calculated during the physics update since they are not going anywhere. If you move a Kinematic Rigidbody out from underneath normal Rigidbodies that are at rest on top of it, the sleeping Rigidbodies will "wake up" and be correctly calculated again in the physics update. So if you have a lot of Static Colliders that you want to move around and have different object fall on them correctly, use Kinematic Rigidbody Colliders.

Collision action matrix

Depending on the configurations of the two colliding Objects, a number of different actions can occur. The chart below outlines what you can expect from two colliding Objects, based on the components that are attached to them. Some of the combinations only cause one of the two Objects to be affected by the collision, so keep the standard rule in mind - physics will not be applied to objects that do not have Rigidbodies attached.

Collision detection occurs and messages are sent upon collision
  Static Collider Rigidbody Collider Kinematic
Rigidbody Collider
Static
Trigger Collider
Rigidbody
Trigger Collider
Kinematic Rigidbody
Trigger Collider
Static Collider   Y        
Rigidbody Collider Y Y Y      
Kinematic Rigidbody Collider   Y        
Static Trigger Collider            
Rigidbody Trigger Collider            
Kinematic Rigidbody Trigger Collider            
Trigger messages are sent upon collision
  Static Collider Rigidbody Collider Kinematic
Rigidbody Collider
Static
Trigger Collider
Rigidbody
Trigger Collider
Kinematic Rigidbody
Trigger Collider
Static Collider         Y Y
Rigidbody Collider       Y Y Y
Kinematic Rigidbody Collider       Y Y Y
Static Trigger Collider   Y Y   Y Y
Rigidbody Trigger Collider Y Y Y Y Y Y
Kinematic Rigidbody Trigger Collider Y Y Y Y Y Y

Physic Material

Физические материалы используются для добавления эффектов трения и упругости сталкивающимся объектам.

Создание физического материала: Assets>Create>Physic Material. Затем перетаскиваем материал из Project View на коллайдер в сцене.


Physic Material Inspector.

Properties

Dynamic Friction Сила трения, воздействующая на предмет, который уже движется. Диапазон 0—1.
Static Friction Сила трения, воздействующая на предмет, который находится в покое. Диапазон 0—1.
Bouncyness Упругость поверхности. При значении «0» упругости нет, объекты не отскакивают. При значении «1» объекты отскакивают без потерь энергии.
Friction Combine Mode Режим объединения сил трения двух соприкосающихся объектов.
Average Берётся среднее арифметическое.
Min Берётся наименьшее значение.
Max Берётся наибольшее значение.
Multiply Берётся произведение значений (перемножаются).
Bounce Combine Режим объединения сил упругости двух соударяющихся объектов. Варианты те же самые, что и у силы трения.
Friction Direction 2The direction of anisotropy. Anisotropic friction is enabled if this direction is not zero. Dynamic Friction 2 and Static Friction 2 will be applied along Friction Direction 2.
Dynamic Friction 2If anisotropic friction is enabled, DynamicFriction2 will be applied along Friction Direction 2.
Static Friction 2If anisotropic friction is enabled, StaticFriction2 will be applied along Friction Direction 2.

Details

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

Hints

Не используйте стандартные физические материалы для главного персонажа. Лучше настроить материал самостоятельно.

Hinge Joint

Стержневой сустав (Hinge Joint) связывает вместе два Rigidbodies, вынуждая их перемещаться так, как будто они связаны стержнем. Это прекрасно работает в дверных петлях, но може так же применяться к цепям, маятника и т. п. 


Hinge Joint Inspector.

Properties

Connected BodyOptional reference to the Rigidbody that the joint is dependent upon. If not set, the joint connects to the world.
AnchorThe position of the axis around which the body swings. The position is defined in local space.
AxisThe direction of the axis around which the body swings. The direction is defined in local space.
Use SpringSpring makes the Rigidbody reach for a specific angle compared to its connected body.
SpringProperties of the Spring that are used if Use Spring is enabled.
SpringThe force the object asserts to move into the position.
DamperThe higher this value, the more the object will slow down.
Target PositionTarget angle of the spring. The spring pulls towards this angle measured in degrees.
Use MotorThe motor makes the object spin around.
MotorProperties of the Motor that are used if Use Motor is enabled.
Target VelocityThe speed the object tries to attain.
ForceThe force applied in order to attain the speed.
Free SpinIf enabled, the motor is never used to brake the spinning, only accelerate it.
Use LimitsIf enabled, the angle of the hinge will be restricted within the Min & Max values.
Limits Properties of the Limits that are used if Use Limits is enabled.
MinThe lowest angle the rotation can go.
MaxThe highest angle the rotation can go.
Min BounceHow much the object bounces when it hits the minimum stop.
Max BounceHow much the object bounces when it hits the maximum stop.
Break ForceThe force that needs to be applied for this joint to break.
Break TorqueThe torque that needs to be applied for this joint to break.

Details

A single Hinge Joint should be applied to a GameObject. The hinge will rotate at the point specified by the Anchor property, moving around the specified Axis property. You do not need to assign a GameObject to the joint's Connected Body property. You should only assign a GameObject to the Connected Body property if you want the joint's Transform to be dependent on the attached object's Transform.

Think about how the hinge of a door works. The Axis in this case is up, positive along the Y axis. The Anchor is placed somewhere at the intersection between door and wall. You would not need to assign the wall to the Connected Body, because the joint will be connected to the world by default.

Now think about a doggy door hinge. The doggy door's Axis would be sideways, positive along the relative X axis. The main door should be assigned as the Connected Body, so the doggy door's hinge is dependent on the main door's Rigidbody.

Chains

Multiple Hinge Joints can also be strung together to create a chain. Add a joint to each link in the chain, and attach the next link as the Connected Body.

Hints