Перейти к содержимому

Rigidbody2d unity как работает

  • автор:

Rigidbody 2D

Компонент Rigidbody 2D помещает объект под управление физического движка системы, которая имитирует аспекты физических систем, чтобы объекты могут правильно ускоряться и подвергаться воздействию столкновений, гравитации и других сил. Подробнее
См. в Словарь . Многие концепции знакомы из стандартного компонента Rigidbody , который позволяет GameObject, на который будет воздействовать смоделированная гравитация и другие силы. Подробнее
См. в Словарь перенос компонента в Rigidbody 2D; разница в том, что в 2D объекты могут двигаться только в плоскости XY и могут вращаться только вокруг оси, перпендикулярной этой плоскости.

Компонент Rigidbody 2D отображается в редакторе Unity по-разному в зависимости от выбранного типа тела.

Как работает Rigidbody 2D

Обычно компонент Transform редактора Unity Компонент Transform определяет положение, поворот и масштаб каждого объекта в сцене. . Каждый GameObject имеет Transform. Подробнее
См. в Словарь определяет, как GameObject Фундаментальный объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в разделе Словарь (и его дочерние объекты GameObject) позиционируется , вращается и масштабируется внутри Сцена Сцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь . Когда он изменяется, он обновляет другие компоненты, которые могут обновлять такие вещи, как то, где они отображаются или где коллайдеры используемая невидимая форма для обработки физических столкновений для объекта. Коллайдер не обязательно должен быть точно такой же формы, как сетка объекта — грубое приближение часто бывает более эффективным и неразличимым в игровом процессе. Подробнее
См. в Словарь . 2D-физический движок может перемещать коллайдеры и заставлять их взаимодействовать друг с другом, поэтому для физического движка требуется метод, чтобы передать это движение коллайдеров компонентам Transform. Это движение и связь с коллайдерами — то, для чего нужен 2D-компонент Rigidbody.

Компонент Rigidbody 2D переопределяет Transform и обновляет его до положения/поворота, заданного Rigidbody 2D. Обратите внимание, что, хотя вы по-прежнему можете переопределить Rigidbody 2D, изменив компонент Transform самостоятельно (поскольку Unity предоставляет все свойства для всех компонентов), это вызовет проблемы, такие как прохождение игровых объектов сквозь друг друга или друг друга, а также непредсказуемое движение.

Любой компонент Collider 2D, добавленный к тому же GameObject или дочернему GameObject, неявно присоединяется к этому Rigidbody 2D. Когда 2D-коллайдер прикреплен к 2D-твердому телу, он движется вместе с ним. 2D-коллайдер никогда не следует перемещать напрямую с помощью Transform или любого другого смещения коллайдера; Вместо этого следует перемещать Rigidbody 2D. Это обеспечивает наилучшую производительность и гарантирует правильное столкновение Столкновение происходит, когда физический движок обнаруживает, что коллайдеры двух игровых объектов соприкасаются или перекрываются. , когда хотя бы один имеет компонент Rigidbody и находится в движении. Подробнее
Смотреть в Словарь . 2D-коллайдеры, прикрепленные к одному и тому же 2D-объекту Rigidbody, не будут сталкиваться друг с другом. Это означает, что вы можете создать набор коллайдеров, которые эффективно действуют как единый составной коллайдер, движущийся и вращающийся синхронно с Rigidbody 2D.

При разработке сцены вы можете использовать 2D-объект Rigidbody по умолчанию и начать присоединять коллайдеры. Эти коллайдеры позволяют любым другим коллайдерам, прикрепленным к разным 2D-объектам Rigidbody, сталкиваться друг с другом.

Совет

Добавление Rigidbody 2D позволяет использовать спрайт двухмерные графические объекты. Если вы привыкли работать в 3D, спрайты — это, по сути, просто стандартные текстуры, но есть специальные приемы комбинирования текстур спрайтов и управления ими для повышения эффективности и удобства во время разработки. Подробнее
См. в Словарь , чтобы двигаться физически убедительно, применяя силы сценария. API. Когда соответствующий компонент коллайдера также присоединен к спрайту GameObject, на него влияют столкновения с другими движущимися объектами GameObject. Использование физики упрощает многие распространенные игровые механики и обеспечивает реалистичное поведение с минимальным кодированием.

Тип телосложения

У компонента Rigidbody 2D вверху есть настройка Тип тела. Выбранный вами вариант влияет на другие настройки, доступные в компоненте.

Существует три варианта типа телосложения; каждый определяет общее и фиксированное поведение. Любой 2D-коллайдер, прикрепленный к 2D-объекту Rigidbody, наследует Тип тела 2D-объекта Rigidbody. Три варианта:

Выбранный вами вариант определяет:

  • Movement (position & rotation) behavior
  • Collider interaction

Обратите внимание, что, хотя 2D-объекты Rigidbody часто описываются как сталкивающиеся друг с другом, сталкиваются именно 2D-объекты Collider, прикрепленные к каждому из этих тел. 2D-объекты Rigidbody не могут сталкиваться друг с другом без коллайдеров.

Изменение типа тела Rigidbody 2D может быть сложным процессом. Когда тип тела изменяется, различные внутренние свойства, связанные с массой, немедленно пересчитываются, и все существующие контакты для 2D-коллайдера, прикрепленного к 2D-объекту Rigidbody, необходимо переоценить во время следующего FixedUpdate. В зависимости от того, сколько контактов и коллайдеров 2D прикреплено к телу, изменение типа тела может привести к изменению производительности.

Body Type: Dynamic

Dynamic Rigidbody 2D предназначен для перемещения при моделировании. Он обладает полным набором доступных ему свойств, таких как конечная масса и лобовое сопротивление, и на него влияют гравитация и силы. Динамическое тело будет сталкиваться с любым другим типом тела и является наиболее интерактивным из типов тела. Это тип тела по умолчанию для Rigidbody 2D, потому что это наиболее распространенный тип тела для вещей, которые должны двигаться. Это также наиболее затратный по производительности тип кузова из-за его динамичного характера и интерактивности со всем, что его окружает. Для этого типа тела доступны все свойства Rigidbody 2D.

Не используйте компонент Transform для установки положения или поворота Dynamic Rigidbody 2D. Моделирование изменяет положение Dynamic Rigidbody 2D в соответствии с его скоростью; вы можете изменить это напрямую с помощью сил, приложенных к нему с помощью скриптов фрагмент кода, который позволяет вам создавать свои собственные компоненты, запускать игру событий, изменяйте свойства компонентов с течением времени и реагируйте на ввод пользователя любым удобным для вас способом. Подробнее
См. в Словарь или косвенно через столкновения и гравитацию.

Свойства: Функции:
Body Type Установите параметры компонента RigidBody 2D, чтобы вы могли управлять поведением движения (положением и вращением) и взаимодействием 2D-коллайдера.
Варианты:Dynamic, Kinematic, Static
Material Ресурс, определяющий, как должна отображаться поверхность. More info
See in Словарь
Используйте это, чтобы указать общий материал для всех 2D-объектов Collider, прикрепленных к определенному родительскому 2D-объекту Rigidbody.
Примечание. Collider 2D использует собственное свойство материала, если оно установлено. Если здесь или в Collider 2D не указан Материал, по умолчанию используется параметр Нет (Physics Material 2D). При этом используется Материал по умолчанию, который можно установить в окне Physics 2D.
Collider 2D использует следующий порядок приоритета, чтобы определить, какой параметр Material использовать:
1. Физический материал 2D, указанный в самом коллайдере 2D.
2. Физический 2D-материал, указанный в прикрепленном 2D-объекте Rigidbody.
Материал Physics Material 2D по умолчанию, указанный в окне Physics 2D.
Совет: используйте это, чтобы убедиться, что все 2D-объекты Collider, прикрепленные к одному и тому же Static Body Type Rigidbody 2D, могут использовать один и тот же материал.
Simulated Включите Simulated (установите флажок), если вы хотите, чтобы Rigidbody 2D и любые прикрепленные Collider 2D и Joint Физический компонент, обеспечивающий динамическую связь между компонентами Rigidbody, обычно допускающий некоторую степень движения, например шарнир. Подробнее
См. в Словарь 2D для взаимодействия с физическим моделированием во время выполнения. Если это отключено (флажок снят), эти компоненты не взаимодействуют с симуляцией. Дополнительные сведения см. в разделе 2D-свойства Rigidbody: имитация ниже. Этот флажок установлен по умолчанию.
Use Auto Mass Установите флажок, если вы хотите, чтобы Rigidbody 2D автоматически определял массу GameObject по его 2D-коллайдеру.
Mass Задайте массу Rigidbody 2D. Это недоступно, если вы выбрали «Использовать автомассу».
Linear Drag Коэффициент сопротивления, влияющий на позиционное движение.
Angular Drag Коэффициент сопротивления, влияющий на вращательное движение.
Gravity Scale Определите степень воздействия гравитации на GameObject.
Обнаружение столкновений Автоматический процесс, выполняемый Unity, который определяет, вступал ли движущийся игровой объект с компонентом Rigidbody и коллайдера в контакт с какими-либо другими коллайдерами. Подробнее
См. в Словарь
Определить, как обнаруживаются столкновения между Collider 2D.
Discrete Когда для параметра Обнаружение столкновений задано значение Дискретное, игровые объекты с 2D-объектами Rigidbody и 2D-коллайдерами могут перекрываться или проходить сквозь друг друга во время обновления физики, если они движутся достаточно быстро. Контакты столкновения генерируются только в новой позиции.
Continuous Если для параметра Обнаружение столкновений установлено значение Непрерывно, игровые объекты с 2D-объектами Rigidbody и 2D-коллайдерами не проходят друг через друга во время обновления. Вместо этого Unity вычисляет первую точку столкновения любого из двухмерных объектов Collider и перемещает туда GameObject. Обратите внимание, что это требует больше процессорного времени, чем Discrete.
Sleeping Mode Определите, как GameObject «спит», чтобы сэкономить время процессора, когда он находится в состоянии покоя.
Never Sleep Спящий режим отключен (его следует по возможности избегать, так как это может повлиять на системные ресурсы).
Start Awake GameObject изначально бодрствует.
Start Asleep GameObject изначально спит, но может быть разбужен коллизиями.
Interpolate Процесс вычисления значений между двумя определенными значениями. Используется в анимации (между ключевыми кадрами), физике (между физическими временными шагами) и многопользовательской игре (между сетевыми обновлениями).
See in Словарь
Определите, как движение GameObject интерполируется между обновлениями физики (полезно, когда движение имеет тенденцию к рывкам).
None Сглаживание движения не применяется.
Interpolate Движение сглаживается на основе позиций GameObject в предыдущих кадрах..
Extrapolate Движение сглаживается на основе оценки его положения в следующем кадре.
Constraints Настройки компонентов соединения, которые ограничивают движение или вращение. Тип и количество ограничений зависит от типа соединения. More info
See in Словарь
Определите любые ограничения на движение Rigidbody 2D.
Freeze Position Выборочно останавливает перемещение Rigidbody 2D по мировым осям X и Y.
Freeze Rotation Выборочно останавливает вращение Rigidbody 2D вокруг оси Z.

Body Type: Kinematic

Кинематическое твердое тело 2D предназначено для перемещения в условиях моделирования, но только под очень явным контролем пользователя. В то время как на Dynamic Rigidbody 2D действуют гравитация и силы, на Kinematic Rigidbody 2D нет. По этой причине он быстрый и требует меньше системных ресурсов, чем Dynamic Rigidbody 2D. Кинематическая Rigidbody 2D предназначена для явного изменения положения с помощью Rigidbody2D.MovePosition или Rigidbody2D.MoveRotation. Используйте физические запросы для обнаружения столкновений и скрипты, чтобы решить, куда и как должно двигаться Rigidbody 2D.

Кинематическое твердое тело 2D по-прежнему движется за счет своей скорости, но на скорость не влияют силы или гравитация. Kinematic Rigidbody 2D не сталкивается с другими Kinematic Rigidbody 2D или Static Rigidbody 2D; он сталкивается только с Dynamic Rigidbody 2D. Подобно статическому твердому телу 2D (см. ниже), кинематическое жесткое тело 2D ведет себя как неподвижный объект (как если бы он имел бесконечную массу) во время столкновений. Свойства, связанные с массой, недоступны для этого типа телосложения.

Свойства: Функции:
Body Type Установите параметры компонента RigidBody 2D, чтобы вы могли управлять поведением движения (положением и вращением) и взаимодействием 2D-коллайдера.
Варианты: Dynamic, Kinematic, Static
Material Используйте это, чтобы указать общий материал для всех 2D-объектов Collider, прикрепленных к определенному родительскому 2D-объекту Rigidbody.
Примечание. Collider 2D использует собственное свойство материала, если оно установлено. Если здесь или в Collider 2D не указан Материал, по умолчанию используется параметр Нет (Physics Material 2D). При этом используется Материал по умолчанию, который можно установить в окне Physics 2D.
Collider 2D использует следующий порядок приоритета, чтобы определить, какой параметр Material использовать:
1. Физический материал 2D, указанный в самом коллайдере 2D.
2. Физический 2D-материал, указанный в прикрепленном 2D-объекте Rigidbody.
Материал Physics Material 2D по умолчанию, указанный в окне Physics 2D.
СОВЕТ. Используйте это, чтобы гарантировать, что все 2D-объекты Collider, прикрепленные к одному и тому же Static Body Type Rigidbody 2D, могут использовать один и тот же материал.
Simulated Включите Simulated (установите флажок), если вы хотите, чтобы Rigidbody 2D и любые присоединенные Collider 2D и Joint 2D взаимодействовали с физической симуляцией во время выполнения. Если это отключено (флажок снят), эти компоненты не взаимодействуют с симуляцией. Дополнительные сведения см. в разделе 2D-свойства Rigidbody: имитация ниже. Этот флажок установлен по умолчанию.
Use Full Kinematic Contacts Включите этот параметр (установите флажок), если хотите, чтобы кинематическое твердое 2D-тело сталкивалось со всеми типами 2D-тела Rigidbody. Это похоже на Dynamic Rigidbody 2D, за исключением того, что Kinematic Rigidbody 2D не перемещается физическим движком при контакте с другим компонентом Rigidbody 2D; вместо этого он действует как неподвижный объект с бесконечной массой. Если параметр Использовать полные кинематические контакты отключен, Кинематические 2D-объекты Rigidbody сталкиваются только с Динамическими 2D-объектами Rigidbody. Дополнительные сведения см. в разделе 2D-свойства Rigidbody: использование полных кинематических контактов ниже. Этот флажок не установлен по умолчанию.
Collision Detection Определите, как обнаруживаются столкновения между Collider 2D.
Discrete Когда для параметра Обнаружение столкновений задано значение Дискретное, игровые объекты с 2D-объектами Rigidbody и 2D-коллайдерами могут перекрываться или проходить сквозь друг друга во время обновления физики, если они движутся достаточно быстро. Контакты столкновения генерируются только в новой позиции.
Continuous Если для параметра Обнаружение столкновений установлено значение Непрерывно, игровые объекты с 2D-объектами Rigidbody и 2D-коллайдерами не проходят друг через друга во время обновления. Вместо этого Unity вычисляет первую точку столкновения любого из двухмерных объектов Collider и перемещает туда GameObject. Обратите внимание, что это требует больше процессорного времени, чем Discrete.
Sleeping Mode Определите, как GameObject «спит», чтобы сэкономить время процессора, когда он находится в состоянии покоя.
Never Sleep Спящий режим отключен (его следует по возможности избегать, так как это может повлиять на системные ресурсы).
Start Awake GameObject изначально бодрствует.
Start Asleep GameObject изначально спит, но может быть разбужен коллизиями.
Interpolate Определите, как движение GameObject интерполируется между обновлениями физики (полезно, когда движение имеет тенденцию к рывкам).
None Сглаживание движения не применяется.
Interpolate Движение сглаживается на основе позиций GameObject в предыдущих кадрах.
Extrapolate Движение сглаживается на основе оценки его положения в следующем кадре.
Constraints Определите любые ограничения на движение Rigidbody 2D.
Freeze Position Выборочно останавливает твердое тело 2D, перемещающееся по осям x и y в мире..
Freeze Rotation Выборочно останавливает вращение Rigidbody 2D вокруг мировой оси z.

Body Type: Static

Static Rigidbody 2D спроектирован таким образом, чтобы вообще не двигаться при моделировании; если с ним что-то сталкивается, статическое твердое тело 2D ведет себя как неподвижный объект (как если бы он имел бесконечную массу). Это также наименее ресурсоемкий тип кузова. Статическое тело сталкивается только с Динамическим твердым телом 2D. Столкновение двух Static Rigidbody 2D не поддерживается, поскольку они не предназначены для перемещения.

Для этого типа тела доступен только очень ограниченный набор свойств.

Свойства: Функции:
Body Type Установите параметры компонента RigidBody 2D, чтобы вы могли управлять поведением движения (положением и вращением) и взаимодействием 2D-коллайдера.
Варианты: Dynamic, Kinematic, Static
Material Используйте это, чтобы указать общий материал для всех 2D-объектов Collider, прикрепленных к определенному родительскому 2D-объекту Rigidbody.
Примечание. Collider 2D использует собственное свойство материала, если оно установлено. Если здесь или в Collider 2D не указан Материал, по умолчанию используется параметр Нет (Physics Material 2D). При этом используется Материал по умолчанию, который можно установить в окне Physics 2D.
Collider 2D использует следующий порядок приоритета, чтобы определить, какой параметр Material использовать:
1. Физический материал 2D, указанный в самом коллайдере 2D.
2. Физический 2D-материал, указанный в прикрепленном 2D-объекте Rigidbody.
Материал Physics Material 2D по умолчанию, указанный в окне Physics 2D.
СОВЕТ. Используйте это, чтобы гарантировать, что все 2D-объекты Collider, прикрепленные к одному и тому же Static Body Type Rigidbody 2D, могут использовать один и тот же материал.
Simulated Включите Simulated (установите флажок), если вы хотите, чтобы Rigidbody 2D и любые присоединенные Collider 2D и Joint 2D взаимодействовали с физической симуляцией во время выполнения. Если это отключено (флажок снят), эти компоненты не взаимодействуют с симуляцией. Дополнительные сведения см. в разделе 2D-свойства Rigidbody: имитация ниже. Этот флажок установлен по умолчанию.

Существует два способа пометить Rigidbody 2D как Static:

  1. Чтобы GameObject с 2D-компонентом Collider вообще не имел 2D-компонента Rigidbody. Все такие 2D-объекты Collider внутренне считаются присоединенными к одному скрытому компоненту Static Rigidbody 2D.
  2. Чтобы GameObject имел Rigidbody 2D и для этого Rigidbody 2D было задано значение Static.

Метод 1 — это сокращение для создания статических коллайдеров 2D. При создании большого количества Статических коллайдеров 2D проще не добавлять Rigidbody 2D для каждого игрового объекта с 2D-коллайдером.

Метод 2 существует из соображений производительности. Если во время выполнения Static Collider 2D нужно переместить или перенастроить, это можно сделать быстрее, если у него есть собственный Rigidbody 2D. Если группу 2D-объектов Collider необходимо переместить или изменить конфигурацию во время выполнения, быстрее сделать так, чтобы все они были дочерними элементами одного родительского 2D-объекта Rigidbody, помеченного как Static, чем перемещать каждый игровой объект по отдельности.

Примечание. Как указано выше, статические твердые 2D-объекты не допускают перемещения и столкновений между двумя статическими жесткими телами Двумерные объекты Двумерный игровой объект, например тайловая карта или спрайт. Подробнее
См. в Словарь , что пересечения не зарегистрированы. Однако Статические 2D-объекты Rigidbody и Кинематические 2D-объекты Rigidbody будут взаимодействовать друг с другом, если один из их 2D-коллайдеров установлен в качестве триггера. Существует также функция, которая изменяет то, с чем будет взаимодействовать кинематическое тело (см. раздел Использование полных кинематических контактов ниже).

2D-свойства жесткого тела

Имитация

Используйте свойство Simulated, чтобы остановить (снято) и запустить (с флажком) 2D-объект Rigidbody и любые присоединенные 2D-объекты Collider и 2D-объекты Joint от взаимодействия с 2D-моделированием физики. Изменение этого свойства намного эффективнее с точки зрения использования памяти и процессора, чем включение или отключение отдельных компонентов Collider 2D и Joint 2D.

Если установлен флажок Имитация, происходит следующее:

  • 2D-объект Rigidbody движется с помощью симуляции (применяются гравитационные и физические силы)
  • Все подключенные 2D-коллайдеры продолжают создавать новые контакты и постоянно переоценивать контакты
  • Любые присоединенные 2D-объекты Joint моделируются и ограничивают присоединенный 2D-объект Rigidbody.
  • Все внутренние физические объекты для Rigidbody 2D, Collider 2D и Joint 2D остаются в памяти

Если флажок Имитация не установлен, происходит следующее:

  • Твердое тело 2D не перемещается при моделировании (гравитация и физические силы не применяются)
  • 2D Rigidbody не создает новые контакты, а любые присоединенные контакты Collider 2D уничтожаются
  • Присоединенные 2D-объекты Joint не моделируются и не ограничивают присоединенные 2D-объекты Rigidbody.
  • Все внутренние физические объекты для Rigidbody 2D, Collider 2D и Joint 2D остаются в памяти
Почему снятие флажка «Имитация» более эффективно, чем управление отдельными компонентами?

В 2D-моделировании физики 2D-компонент Rigidbody управляет положением и вращением прикрепленных 2D-компонентов Collider и позволяет компонентам Joint 2D использовать эти положения и повороты в качестве опорных точек. Двухмерный коллайдер движется, когда твердое тело, к которому он прикреплен, движется. Затем Collider 2D рассчитывает контакты с другими Collider 2D, прикрепленными к другим 2D Rigidbody. Совместные 2D-объекты также ограничивают положения и повороты Rigidbody 2D. Все это требует времени моделирования.

Вы можете останавливать и запускать отдельные элементы 2D-моделирования физики, включая и отключая компоненты по отдельности. Вы можете сделать это как для компонентов Collider 2D, так и для компонентов Joint 2D. Однако включение и отключение отдельных элементов физического моделирования требует использования памяти и мощности процессора. Когда элементы моделирования отключены, 2D-физический движок не создает никаких внутренних физических объектов для моделирования. Когда элементы симуляции включены, 2D-физический движок имеет внутренние физические объекты для симуляции. Включение и отключение компонентов моделирования 2D-физики означает необходимость создания и уничтожения внутренних игровых объектов и компонентов, основанных на физике; отключить симуляцию проще и эффективнее, чем отключить отдельные компоненты.

ПРИМЕЧАНИЕ. Если флажок Имитация для Rigidbody 2D не установлен, любой прикрепленный 2D-коллайдер фактически «невидим», то есть; он не может быть обнаружен какими-либо физическими запросами, такими как Physics.Raycast.

Использовать полные кинематические контакты

Включите этот параметр (установите флажок), если вы хотите, чтобы кинематическое твердое 2D-тело сталкивалось со всеми типами твердого 2D-тела. Это похоже на Dynamic Rigidbody 2D, за исключением того, что Kinematic Rigidbody 2D не перемещается физическим движком при контакте с другим Rigidbody 2D; он действует как неподвижный объект с бесконечной массой.

Если этот параметр отключен (снят флажок), кинематическое твердое тело 2D сталкивается только с динамическим жестким телом 2D; он не сталкивается с другими Kinematic Rigidbody 2D или Static Rigidbody 2D (обратите внимание, что триггерные коллайдеры являются исключением из этого правила). Это означает, что никакие обратные вызовы сценариев коллизий (OnCollisionEnter, OnCollisionStay, OnCollisionExit).

Это может быть неудобно, если вы используете физические запросы (например, Physics.Raycast), чтобы определить, куда и как должен двигаться 2D-объект Rigidbody. и когда вам требуется несколько Kinematic Rigidbody 2D для взаимодействия друг с другом. Включите Использовать полные кинематические контакты, чтобы Кинематические компоненты Rigidbody 2D взаимодействовали таким образом.

Использовать полные кинематические контакты позволяет явно управлять положением и вращением кинематического твердого тела 2D, но по-прежнему допускает обратные вызовы полного столкновения. Если вам требуется явный контроль над всеми 2D-объектами Rigidbody, используйте Кинематические 2D-объекты Rigidbody вместо Динамические 2D-объекты Rigidbody, чтобы по-прежнему иметь полную поддержку обратного вызова столкновений.

Rigidbodies (твёрдые тела)

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

Так как компонент Rigidbody управляет перемещением объекта, к которому он прикреплён, вам не следует пытаться воздействовать на объект из кода с помощью изменения таких свойств Transform, как position и rotation. Вместо этого вам следует применять силы для того, чтобы толкать объект и позволить физическому движку рассчитать результаты.

There are some cases where you might want a GameObject to have a Rigidbody without having its motion controlled by the physics engine. For example, you may want to control your character directly from script code but still allow it to be detected by triggers (see Triggers under the Colliders topic). This kind of non-physical motion produced from a script is known as kinematic motion. The Rigidbody component has a property called Is Kinematic which removes it from the control of the physics engine and allow it to be moved kinematically from a script. It is possible to change the value of Is Kinematic from a script to allow physics to be switched on and off for an object, but this comes with a performance overhead and should be used sparingly.

См. страницы справки по Rigidbody и Rigidbody 2D для дополнительной информации о настройках и опциях по скриптингу этих компонентов.

Засыпание

When a Rigidbody is moving slower than a defined minimum linear or rotational speed, the physics engine assumes it has come to a halt. When this happens, the GameObject does not move again until it receives a collision or force, and so it is set to “sleeping” mode. This optimisation means that no processor time is spent updating the Rigidbody until the next time it is “awoken” (that is, set in motion again).

Когда твёрдое тело перемещается со скоростью, меньшей определённого минимального порога, физический движок предполагает, что оно остановилось и находится в покое. При этом, объект не будет вновь двигаться до тех пор, пока с ним не произойдёт столкновение или пока к нему не применят силу, так что он уходит в “спящий” режим. Эта оптимизация означает, что на объект не будут расходоваться ресурсы CPU, пока его вновь не “разбудят” (т.е. не вновь не приведут в движение). По многим причинам засыпание и пробуждение твёрдых тел происходит прозрачно. Однако, иногда объект не удаётся разбудить, если в него или от него переместится статичный коллайдер (тот, что без твёрдого тела) изменяя положение трансформации. Это может привести, скажем, к висящему в воздухе твёрдому телу, когда пол под ним сдвинулся вниз. В таких случаях объект можно разбудить принудительно, с помощью функции WakeUp . См. страницы про компоненты Rigidbody и Rigidbody 2D для дополнительной информации о засыпании.

Rigidbody 2D (Двухмерное твердое тело)

A Rigidbody2D component places an object under the control of the physics engine. Many concepts familiar from the standard Rigidbody component carry over to Rigidbody 2D, with the difference that in 2D, objects can only move in the XY plane and can only rotate on an axis perpendicular to that plane.

Свойство: Функция:
Use Auto Mass Detect the object’s mass from its collider? Check the box for yes.
Mass Mass of the rigidbody. (Greyed out if you have selected Use Auto Mass.)
Linear Drag Коэффициент натяжения влияющий на смещение позиции.
Angular Drag Drag coefficient affecting rotational movement.
Gravity Scale Угол, при котором на объект действует гравитация.
Is Kinematic Твёрдое тело сместилось за счёт сил или за счёт столкновений?
Interpolate Как интерполируется движение объекта между обновлениями физических расчётов (необходимо в случаях, когда движение становится похожим на судорожное).
None Никакое сглаживание движений не применяется.
Interpolate Движения сглаживается основываясь на позиции объекта в предыдущем кадре.
Extrapolate Движения сглаживается основываясь на предполагаемой позиции объекта в следующем кадре.
Sleeping Mode Каким образом объект “спит”(“sleeps”), чтобы сэкономить время процессора во время покоя.
Never Sleep Sleeping is disabled (should be avoided where possible).
Start Awake Объект изначально активный (не спящий).
Start Asleep Объект изначально неактивный (спящий), но может быть активирован (разбужен) столкновениями.
Collision Detection Как обнаруживаются столкновения с другими объектами.
Discrete Столкновение регистрируется только если коллайдер объекта находится во взаимодействии с другим коллайдером во время обновления физических расчётов.
Continuous Столкновение регистрируется, если коллайдер объекта должен столкнуться с другим коллайдером между обновлениями физических расчётов.
Constraints Restrictions on the rigidbody’s motion:-
Freeze Position Stops the rigidbody moving in the world X & Y axes selectively.
Freeze Rotation Stops the rigidbody rotating around the Z axes selectively.

Детали

Adding a Rigidbody 2D allows a sprite to be moved in a physically convincing way by applying forces from the scripting API. When the appropriate collider component is also attached to the sprite object, it will be affected by collisions with other moving objects. Using physics simplifies many common gameplay mechanics and allows for realistic, emergent behaviour with minimal coding.

Кинематические твёрдые тела (Kinematic Rigidbodies)

The Is Kinematic setting switches off the physical behaviour of the Rigidbody 2D so that it will not react to gravity and collisions. This is typically used to keep an object under non-physical script control most of the time but then switch to physics in a particular situation. For example, a player might normally move by walking (better handled without physics) but then get catapulted into the air by an explosion or strike. Physics can be used to create the catapulting effect if you switch off ’’Is Kinematic» just before applying a large force to the object.

Как применять методы RigidBody в Unity. С# (Си Шарп) программирование в Unity

Привет! Школа программирования для детей “Пиксель” продолжает делиться бесплатными уроками по Unity для начинающих. В них мы учимся создавать игры в Unity и писать скрипты на языке программирования C# (Си Шарп). На этот раз мы разберем методы RigidBody в Юнити. Мы рассмотрим методы AddForce, MovePosition, MoveRotation.

Подробную видеоинструкцию вы найдете в конце материала.

Для начала подготовим сцену. Создаем Plane и Cube. Добавляем Rigidbody.

rigidbody unity

Создаем скрипт. Называем его PlayerControl.

методы си шарп

Метод AddForce в Unity

Метод AddForce прикладывает силу к физическому объекту.

Объявляем две переменные, в speed записываем силу толчка и создаем переменую типа RigidBody. В start назначаем компонент.

Update переименовываем на FixedUpdate и внутри него создаем метод AddForce. В нем текущую позицию умножаем на силу толчка.

addforce unity

Перемещаем скрипт на куб и запрещаем вращение по трем осям.

unity addforce 2d

Запускаем и проверяем.

Метод AddForce лучшего всего подходит для создания прыжка в Unity.

Метод MovePosition в Unity

Метод MovePosition перемещает твердое тело в указанную позицию путем расчета соответствующей скорости, требуемой для передвижения твердого тела в эту позицию на протяжении следующего физического обновления. На протяжении движения ни гравитация, ни линейное торможение не будет влиять на тело.

Переименовываем метод AddForce на MovePosition. В нем к текущей позиции прибавляем, куда будет двигаться объект, и умножаем на сглаживание.

unity moveposition

Метод MoveRotation в Unity

Метод MoveRotation поворачивает объект вокруг заданной оси.
Тут мы используем Quaternion.Euler — он возвращает или задает представление угла Эйлера для поворота.

Углы Эйлера могут представлять трехмерное вращение, выполняя три отдельных вращения вокруг отдельных осей. В Unity эти вращения выполняются вокруг оси Z, оси X и оси Y в указанном порядке. Контролировать вращение мы будем с помощью Vector3, в нем мы укажем нужную ось поворота.

moverotation

OnCollisionEnter — вызывается, когда два твердых тела или коллайдера соприкоснулись.
OnCollisionStay — вызывается когда два твердых тела или коллайдера соприкасаются.
OnCollisionExit — вызывается когда одно твердое тело или один коллайдер вышел из другого коллайдера.

rigidbody moveposition

Методы MovePosition и MoveRotation лучше использовать для перемещения объекта в Unity.

На этом наш урок по Юнити подходит к концу. Если вы хотите научиться создавать полноценные игры в Unity, программировать на C# и писать сложные скрипты для своих проектов, приходите к нам на полный курс по разработке игр на Unity 3D. Мы знакомим детей 10-14 лет с геймдевом и учим создавать собственные игры. Присоединяйтесь!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *