Rigidbody.AddForce
Declaration
public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);Параметры
| Параметр | Описание |
|---|---|
| сила | Вектор силы в мировых координатах. |
| режим | Тип применяемого усилия. |
Описание
Добавляет силу к Rigidbody.
Сила применяется непрерывно вдоль направления вектора force. Указание ForceMode mode позволяет изменить тип силы на Ускорение, Импульс или Изменение Скорости.
Эффекты сил, примененных с помощью этой функции, накапливаются во время вызова. Физическая система применяет эффекты во время следующего запуска симулирования (либо после FixedUpdate, либо когда скрипт явно вызывает метод Physics.Simulate). Поскольку эта функция имеет различные режимы, система физики накапливает только полученное изменение скорости, а не переданные значения силы. Предполагая, что deltaTime (DT) равно длине шага симулирования (Time.fixedDeltaTime), а масса равна массе Rigidbody, к которому применяется сила, вот как изменение скорости рассчитывается для всех режимов:
- ForceMode.Force: интерпретирует вход как силу (измеряемую в ньютонах) и изменяет скорость на величину силы * DT / массу. Эффект зависит от длины шага моделирования и массы тела.
- ForceMode.Acceleration: Интерпретирует параметр как ускорение (измеряемое в метрах в секунду в квадрате) и изменяет скорость на значение силы * DT. Эффект зависит от длины шага симулирования, но не зависит от массы тела.
- ForceMode.Impulse: Интерпретирует параметр как импульс (измеряемый в ньютон-секундах) и изменяет скорость на значение силы / массы. Эффект зависит от массы тела, но не зависит от длины шага симулирования.
- ForceMode.VelocityChange: Интерпретирует параметр как прямое изменение скорости (измеряется в метрах в секунду), и изменяет скорость на величину силы. Эффект не зависит от массы тела или длины шага симулирования.
Сила может быть применена только к активному Rigidbody. Если a GameObject является неактивным, AddForce Кроме того, Rigidbody не может быть кинематическим.
По умолчанию состояние Rigidbody настроено на пробуждение при приложении силы, если только сила не Vector3.zero.
Дополнительные ресурсы: AddForceAtPosition, AddRelativeForce, AddTorque.
В данном примере применяется нагрузка вперед на GameObject's Rigidbody.
using UnityEngine; using UnityEngine.InputSystem;
public class Example : MonoBehaviour { Rigidbody m_Rigidbody; public float m_Thrust = 20f;
void Start() { //Fetch the Rigidbody from the GameObject with this script attached m_Rigidbody = GetComponent<Rigidbody>(); }
void FixedUpdate() { if (Keyboard.current.spaceKey.isPressed) { //Apply a force to this Rigidbody in direction of this GameObjects up axis m_Rigidbody.AddForce(transform.up * m_Thrust); } } }
Declaration
public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force);Параметры
| Параметр | Описание |
|---|---|
| x | Размер силы вдоль мировой оси x. |
| y | Размер силы вдоль мировой оси y. |
| z | Размер силы вдоль мировой оси z. |
| режим | Тип применяемого усилия. |
Описание
Добавляет силу к Rigidbody.
В этом примере применяется импульсная сила вдоль оси Z к GameObject's Rigidbody.
using UnityEngine;
public class Example : MonoBehaviour { public float thrust = 1.0f; public Rigidbody rb;
void Start() { rb = GetComponent<Rigidbody>(); rb.AddForce(0, 0, thrust, ForceMode.Impulse); } }