统一更新移动矢量.向量值的物理含义



我试图从第二章末尾的"团结行动"一书中理解示例的物理含义。在此代码中,对象正在移动到帧中的"增量"Vector3。这里的矢量3是一个速度矢量吗?如果是,为什么作者在同一向量中使用重力变量和重力加速度值 (9.8(?

public class FPSInput : MonoBehaviour {
    public float speed = 6.0f;
    public float gravity = -9.8f;
    private CharacterController _charController;
    void Start() {
        _charController = GetComponent<CharacterController>();
    }
    void Update() {
        float deltaX = Input.GetAxis("Horizontal") * speed;
        float deltaZ = Input.GetAxis("Vertical") * speed;
        Vector3 movement = new Vector3(deltaX, 0, deltaZ);
        movement = Vector3.ClampMagnitude(movement, speed);
        movement.y = gravity;
        movement *= Time.deltaTime;
        movement = transform.TransformDirection(movement);
        _charController.Move(movement);
    }
}

Vector3 移动是游戏一帧(更新(中角色移动差异的矢量。

因此,要移动,他首先采用 X 轴和 Z 轴的用户控件,将它们乘以速度。

然后你需要施加重力,因为没有它,你将飞到任何你想飞的地方而不是步行,所以你需要对垂直轴Y应用重力。

然后,您需要将所有内容(此移动矢量(乘以增量时间,增量时间表示帧更新和渲染所花费的时间。如果没有增量时间,您将在不同的帧速率下获得不同的结果。

然后他将"运动"向量(正如我所说的一帧中的运动差异(应用于角色的当前位置。

在统一中有两种移动对象

  1. 向单位添加一个力并推动它移动
  2. 每次经过时设置单元位置(也称为幻灯片单元(

在您的情况下,它是类型 2,因此您的Vector3运动指示移动单元的位置。

在您的代码中,移动是通过具有速度值的多个Input.GetAxis()(值范围:[0, 1](计算的,然后将最大距离作为单位可以移动的间隔movement = Vector3.ClampMagnitude(movement, speed);。它仅用于单位在地面上移动(左,右,向前,向后(

接下来是对于单位高度,移动应用 y 轴等于重力值 (9,8( 乘以 deltaTime。这意味着每 1 秒单位高度将减少 9.8

毕竟,将movement从本地转换为世界,然后按movement设置移动单元的位置。

希望我的回答可以解决您的问题。

最新更新