Физика
Физика Для 3D-проектов Unity использует движок NVIDIA PhysX, а для 2D-проектов отдельный двумерный движок. Встроенная физическая система Unity предоставляет стандартные отраслевые решения для взаимодействия Rigidbody, соединений и сил. Методы Physics API позволяют выполнять трассировку лучей и объёмов, проверять пересечения, а также обрабатывать триггеры и столкновения. 3D-физик а Встроенный физический движок Unity включает в себя несколько полезных компонентов: - Rigidbody позволяет физической системе управлять движением объекта. На Rigidbody действует сила тяжести, а доступные методы позволяют прикладывать к нему силу или крутящий момент. Если компонент Collider активен, соответствующий GameObject реагирует на физические столкновения. - Компоненты Collider (Box Collider, Sphere Collider, Capsule Collider и Mesh Collider) представляют примитивные объёмы или объёмы мешей, задающие границы физических столкновений. - Компоненты Joint (Fixed Joint, Hinge Joint, Spring Joint и Character Joint) позволяют соединять два компонента Rigidbody и моделировать различные ограничения движения: разрушаемое соединение, вращение вокруг одной оси, упругое соединение, шаровой шарнир и т. п. - CharacterController позволяет управлять движением с учётом столкновений без использования Rigidbody.
Компонент Rigidbody поддерживает спекулятивный и основанный на sweep-проверке режимы непрерывного обнаружения столкновений для быстро движущихся объектов. Используйте несколько физических сцен для управления сложными физическими контекстами или обхода их ограничений. Например, можно моделировать несколько физических сцен, чтобы прогнозировать столкновения и траектории объектов GameObject.
Используйте несколько сцен для прогнозирования столкновений и траекторий.
Unity также предоставляет окно Debug Visualization (Window > Analysis > Physics Debugger). В нём можно раскрашивать физические компоненты по категориям и включать или отключать их отображение. Это помогает быстро диагностировать проблемы с Collider и другие физические сценарии в сцене.
Окно Physics Debugger
Обновляйте физику в методе MonoBehaviour.FixedUpdate, который вызывается через фиксированные интервалы времени. Класс Physics содержит статические методы для физических взаимодействий. Кроме того, класс Collider предоставляет события для обработки столкновений и триггеров. Ниже перечислены методы, часто используемые при работе с физикой.
Классы и методы
Описание
MonoBehaviour.FixedUpdate
Обновляет физические расчёты с фиксированной частотой, задаваемой в Edit > Settings > Time > Fixed Timestep.
Physics.Raycast, Physics.Linecast, Physics.BoxCast, Physics.CapsuleCast, Physics.SphereCast
Проверяют пересечение Collider с лучом, линией или объёмом.
Physics.OverlapBox, Physics.OverlapSphere, Physics.OverlapCapsule
Проверяют, находится ли Collider внутри заданного объёма.
Collider.OnCollisionEnter, Collider.OnCollisionStay, Collider.OnCollisionExit
События начала, продолжения и завершения контакта Collider.
Collider.OnTriggerEnter, Collider.OnTriggerStay, Collider.OnTriggerExit
События триггера при начале, продолжении и завершении контакта; физического столкновения не создают.
2D-физика В Unity есть отдельный физический движок, оптимизированный для 2D-физики. Большинство её компонентов - двумерные аналоги компонентов 3D-физики. К именам соответствующих компонентов добавлено «2D»: например, Physics2D, Rigidbody2D, Collider2D, Joint2D и т. п. В остальном они ведут себя так же, как аналогичные 3D-классы. Загрузите проект PhysicsExamples2D с примерами применения и посмотрите сопутствующее вводное видео. Подробнее о встроенной реализации 3D- и 2D-физики читайте в документации Physics. Советы по оптимизации 3D-физики и её настроек приведены в видео Physics Performance Optimization.
Physics Unity implements the NVIDIA PhysX engine for 3D projects and a 2D engine for 2D projects. The built-in physics engine in Unity provides industry standard solutions for Rigidbody interactions, joints, and forces. Use the Physics API for methods to ray cast or shape cast, test overlaps, and handle triggers/collisions. 3D physics Unity’s built-in physics engine includes several useful components: —
Rigidbody allows the physics engine to control movement of the object. A Rigidbody will fall with gravity, and you can apply force or torque to it using the supplied methods. If a Collider component is active, the underlying GameObject will respond to physics collisions.
Colliders (Box Collider, Sphere Collider, Capsule Collider, Mesh Collider) represent primitive or mesh volumes that define the boundaries for physics collisions.
Joints (Fixed Joint, Hinge Joint, Spring Joint, Character Joint) allows you to connect two Rigidbody components to model a variety of motion constraints (e.g., breakable joint, one axis of rotation, elastic joint, ball and socket, etc.).
CharacterController allows you to handle movement constrained by collisions without requiring a Rigidbody.
The Rigidbody component features speculative and sweep-based continuous collision detection for fast-moving objects. Use multiphysics scenes to manage or work around complex physics contexts. For example, you could simulate multiple physics scenes in order to predict GameObject collisions and trajectories.
Use multiple scenes to predict collisions or trajectories.
Unity also provides a Debug Visualization window (Window > Analysis > Physics Debugger), an interface that allows you to color and toggle physics components by category. This helps quickly troubleshoot Colliders or other physics-based scenarios in your scene.
The Physics Debugger window
Apply physics updates inside of MonoBehaviour’s FixedUpdate method, which is called on a fixed time step.The Physics class includes several static methods that you will use for physics interactions. Unity also provides several physics events on the Collider class to handle collisions and triggers. The following are some of the methods that you will use for common physics interactions.
Classes/Methods
Description
Monobehaviour.FixedUpdate
Message for physics calculations updates on a fixed frame-rate determined by Edit > Settings > Time > Fixed Timestep
Physics.Raycast, Physics.Linecast, Physics.BoxCast, Physics.CapsuleCast, Physics.SphereCast
Methods for determining if a collider falls within a ray, line, or shape
Physics.OverlapBox, Physics OverlapSphere, Physics OverlapCapsule
Methods for testing whether a collider falls within a given shape
Collider.OnCollisionEnter, Collider.OnCollisionStay, Collider.OnCollisionExit
Messages sent when an incoming collider makes contact/stays in contact/leaves contact with this object’s collider
Collider.OnTriggerEnter, Collider.OnTriggerStay, Collider.OnTriggerExit
Messages sent when an incoming trigger makes contact/stays in contact/leaves contact with this object’s collider (a trigger does not register an actual collision but sends messages)
2D physics Unity has a separate physics engine optimized for handling 2D physics. Most 2D physics components are simply “flattened” versions of the 3D equivalents. The corresponding components have “2D” appended to the name, e.g., Physics2D, Rigidbody2D, Collider2D, Joint2D, etc. Otherwise, they behave like their analogous 3D classes. Be sure to download the PhysicsExamples2D project for some example use cases, and watch this accompanying introductory video. Read more about the built-in 3D and 2D physics implementations in the Physics documentation. For tips about optimizing 3D physics and its settings, watch Physics Performance Optimization.