📅  最后修改于: 2023-12-03 15:37:57.568000             🧑  作者: Mango
在 Unity 中使用 AddForce
方法可以在物理引擎下让对象移动。这个方法非常适合用在需要模拟世界物理场景的游戏项目中,例如赛车游戏、弹球游戏或者物理仿真游戏中。
在开始介绍 AddForce
方法前,我们需要了解 Unity 中的两个组件:Rigidbody 和 Transform。在 Unity 中,物体(GameObject)会分为两部分进行处理。一部分是负责渲染显示的 Transform
组件,另一部分是负责模拟物理的 Rigidbody
组件。
在使用 C# 脚本来控制物体的运动时,通常需要通过调用 GetComponent<Rigidbody>()
方法来获取其 Rigidbody
组件。
以下是如何获取并使用 AddForce
方法的示例代码:
using UnityEngine;
public class Example : MonoBehaviour
{
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.AddForce(new Vector3(0, 0, 1), ForceMode.Impulse); // 在 Z 轴方向施加一个脉冲力
}
}
在上述示例代码中,rb
变量就是获取到的 Rigidbody
组件。在 FixedUpdate
方法中,我们使用了 AddForce
方法来施加一个力(Force
)给该物体。
AddForce
方法的参数有两个:
force
: 要施加的力向量
mode
: 施加力的模式,有以下四种模式:
Force
:施加一个持续的力。Acceleration
:施加一个持续的加速度。Impulse
:施加一个瞬间的力。VelocityChange
:施加一个瞬间的速度改变。以下是如何在键盘输入时施加不同方向的力的示例代码:
using UnityEngine;
public class Example : MonoBehaviour
{
private Rigidbody rb;
public float forceAmount = 1f;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
Vector3 force = new Vector3(horizontalInput, 0, verticalInput);
force *= forceAmount;
rb.AddForce(force, ForceMode.Impulse);
}
}
在上述示例代码中,我们通过获取键盘输入来计算要施加的力向量,并将其乘上 forceAmount
变量的值。在 Update
方法中,我们使用 AddForce
方法来施加力,力的模式为 Impulse
。
这样,用户就可以通过键盘控制物体移动了。