版本:Unity 6 (6000.0)
语言英语
  • C#

Rigidbody.AddForce

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每项更改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

声明

public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);

参数

force 世界坐标系中的力向量。
mode 要应用的力的类型。

描述

Rigidbody 添加一个力。

力沿着 force 向量的方向持续施加。指定 ForceMode mode 可以将力的类型更改为加速度、冲量或速度变化。

使用此函数应用的力的效果在调用时累积。物理系统在下次模拟运行期间应用这些效果(在 FixedUpdate 之后,或当脚本显式调用 Physics.Simulate 方法时)。由于此函数具有不同的模式,因此物理系统仅累积最终的速度变化,而不是传递的力值。假设 deltaTime (DT) 等于模拟步长 (Time.fixedDeltaTime),并且质量等于应用力的 Rigidbody 的质量,以下是所有模式下速度变化的计算方式

  • ForceMode.Force:将输入解释为力(以牛顿为单位),并根据 force * DT / mass 的值更改速度。效果取决于模拟步长和物体的质量。
  • ForceMode.Acceleration:将参数解释为加速度(以米每秒平方为单位),并根据 force * DT 的值更改速度。效果取决于模拟步长,但不依赖于物体的质量。
  • ForceMode.Impulse:将参数解释为冲量(以牛顿秒为单位),并根据 force / mass 的值更改速度。效果取决于物体的质量,但不依赖于模拟步长。
  • ForceMode.VelocityChange:将参数解释为直接的速度变化(以米每秒为单位),并根据 force 的值更改速度。效果不依赖于物体的质量或模拟步长。

力只能应用于活动的 Rigidbody。如果 GameObject 不处于活动状态,则 AddForce 无效。此外,Rigidbody 不能是运动学。

默认情况下,一旦应用力,Rigidbody 的状态就会设置为唤醒,除非力为 Vector3.zero

其他资源:AddForceAtPositionAddRelativeForceAddTorque

此示例向 GameObject 的 Rigidbody 应用一个向前力。

using UnityEngine;

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 (Input.GetButton("Jump")) { //Apply a force to this Rigidbody in direction of this GameObjects up axis m_Rigidbody.AddForce(transform.up * m_Thrust); } } }

声明

public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force);

参数

x 沿世界 x 轴的力的大小。
y 沿世界 y 轴的力的大小。
z 沿世界 z 轴的力的大小。
mode 要应用的力的类型。

描述

Rigidbody 添加一个力。

此示例沿 Z 轴向 GameObject 的 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); } }