force | 世界坐标系中的力向量。 |
mode | 要应用的力的类型。 |
向 Rigidbody 添加一个力。
力沿着 force
向量的方向持续施加。指定 ForceMode mode
可以将力的类型更改为加速度、冲量或速度变化。
使用此函数应用的力的效果在调用时累积。物理系统在下次模拟运行期间应用这些效果(在 FixedUpdate 之后,或当脚本显式调用 Physics.Simulate 方法时)。由于此函数具有不同的模式,因此物理系统仅累积最终的速度变化,而不是传递的力值。假设 deltaTime (DT) 等于模拟步长 (Time.fixedDeltaTime),并且质量等于应用力的 Rigidbody 的质量,以下是所有模式下速度变化的计算方式
力只能应用于活动的 Rigidbody。如果 GameObject 不处于活动状态,则 AddForce 无效。此外,Rigidbody 不能是运动学。
默认情况下,一旦应用力,Rigidbody 的状态就会设置为唤醒,除非力为 Vector3.zero。
其他资源:AddForceAtPosition、AddRelativeForce、AddTorque。
此示例向 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); } } }
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); } }