Поиск…


Rigidbodies

обзор

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


Добавление компонента Rigidbody

Вы можете добавить Rigidbody, нажав Component> Physics> Rigidbody


Перемещение объекта Rigidbody

Рекомендуется, если вы примените Rigidbody к GameObject, который использует силы или крутящий момент, чтобы переместить его, а не манипулировать его Transform. Для этого используйте AddForce() или AddTorque() :

// Add a force to the order of myForce in the forward direction of the Transform.
GetComponent<Rigidbody>().AddForce(transform.forward * myForce);

// Add torque about the Y axis to the order of myTurn.
GetComponent<Rigidbody>().AddTorque(transform.up * torque * myTurn);

масса

Вы можете изменить массу объекта GameGuide, чтобы повлиять на то, как он реагирует на другие Rigidbodies и силы. Более высокая масса означает, что GameObject будет иметь большее влияние на другие основанные на физике GameObjects и потребует большей силы для перемещения. Объекты различной массы будут падать с одинаковой скоростью, если они имеют одинаковые значения перетаскивания. Чтобы изменить массу в коде:

GetComponent<Rigidbody>().mass = 1000;

Тащить, тянуть

Чем выше значение перетаскивания, тем больше объект будет замедляться при перемещении. Подумайте об этом как о противостоянии. Чтобы изменить перетаскивание кода:

GetComponent<Rigidbody>().drag = 10;

isKinematic

Если вы отметите Rigidbody как Kinematic, то это не может быть затронуто другими силами, но все равно может повлиять на другие GameObjects. Изменить код:

GetComponent<Rigidbody>().isKinematic = true;

Ограничения

Также возможно добавить ограничения для каждой оси, чтобы заморозить положение или вращение Rigidbody в локальном пространстве. По умолчанию используется RigidbodyConstraints.None как показано здесь:

введите описание изображения здесь

Пример ограничений в коде:

// Freeze rotation on all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation 

// Freeze position on all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePosition 

// Freeze rotation and motion an all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeAll 

Вы можете использовать побитовый оператор OR | для объединения нескольких ограничений:

// Allow rotation on X and Y axes and motion on Y and Z axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePositionZ | 
    RigidbodyConstraints.FreezeRotationX;

Столкновения

Если вы хотите, чтобы GameObject с Rigidbody на нем реагировал на столкновения, вам также нужно добавить к нему коллайдер. Типы коллайдера:

  • Коллайдер коробки
  • Сферный коллайдер
  • Капсульный коллайдер
  • Коллайдер колес
  • Мешевый коллайдер

Если вы применяете несколько коллайдеров к GameObject, мы называем это сложным коллайдером.

Вы можете сделать коллайдер в триггере , чтобы использовать OnTriggerEnter() , OnTriggerStay() и OnTriggerExit() . Триггерный коллайдер физически не реагирует на столкновения, другие GameObjects просто проходят через него. Они полезны для обнаружения, когда другой GameObject находится в определенной области или нет, например, при сборе элемента, мы можем захотеть просто запустить его, но обнаружить, когда это произойдет.

Гравитация в жестком теле

Свойство useGravity RigidBody контролирует, влияет ли на него гравитация или нет. Если установлено значение false RigidBody будет вести себя так, как если бы в космическом пространстве (без постоянной силы, применяемой к нему в некотором направлении).

GetComponent<RigidBody>().useGravity = false;

Это очень полезно в ситуациях, когда вам нужны все другие свойства RigidBody кроме движения, управляемого гравитацией.

Когда включено, на RigidBody будет влиять гравитационная сила, созданная в разделе « Physics Settings :

введите описание изображения здесь

Гравитация определяется в мировых единицах в секунду в квадрате и вводится здесь как трехмерный вектор: это означает, что с настройками в изображении примера все RigidBodies с свойством useGravity установленным в True будут испытывать силу в 9,81 единиц в секунду в секунду в направлении вниз (как отрицательные значения Y в системе координат Unity вниз).



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow