📜  如何使用 addforce 移动对象 - C# (1)

📅  最后修改于: 2023-12-03 15:37:57.568000             🧑  作者: Mango

如何使用 AddForce 移动对象 - C#

在 Unity 中使用 AddForce 方法可以在物理引擎下让对象移动。这个方法非常适合用在需要模拟世界物理场景的游戏项目中,例如赛车游戏、弹球游戏或者物理仿真游戏中。

准备工作

在开始介绍 AddForce 方法前,我们需要了解 Unity 中的两个组件:RigidbodyTransform。在 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

这样,用户就可以通过键盘控制物体移动了。