首页 > 解决方案 > 为什么矢量和 OnMove 函数采用不同的轴?

问题描述

我是 Unity 的新手。我正在关注统一网站上的教程。下面是一个代码片段。

void OnMove(InputValue movementValue)
{
    Vector2 movementVector = movementValue.Get<Vector2>();

    movementX = movementVector.x;
    movementY = movementVector.y;
}


void FixedUpdate()
{
    Vector3 movement = new Vector3(movementX, 0.0f, movementY);
    rb.AddForce(movement); 
}

在这里,我试图移动一个球体。我在motionX和movementY中从键盘输入。我的球体不会飞到上面,所以 y 轴应该为零。谁能告诉我为什么 onMove 的 Y 轴是向量 3 的 Z 轴?

标签: unity3d

解决方案


谁能告诉我为什么 onMove 的 Y 轴是向量 3 的 Z 轴?

这是因为您的输入是 2D -- 向左或向右移动被认为是 X 轴输入(如游戏中的键盘按钮 A/D),向前或向后是 Y 轴输入(如键盘中的 W/S )-- 例如,如果您按下 W 键,您的输入将类似于 vector2(0,1) 并且表示 y 轴值为 1...等。所以这是输入,现在我们希望球体在按下 W 键时向前移动,因为您在 3D 空间中工作,向前/向后是 Z 轴。所以我们需要将输入的 y 值放入对象速度中以向前移动(z 轴),这就是为什么上面的示例将 y 输入放入 z 轴以使球体向前/向后移动。

如果您的代码是这样的:

Vector3 movement = new Vector3(movementX, movementY ,0.0f );
rb.AddForce(movement); 

当你按下 W 时,你的球体会飞,当你按下 S 时,你的球体会俯冲。如果是这样的:

Vector3 movement = new Vector3(movementX, 0.0f, movementY );
rb.AddForce(movement); 

您的对象将根据您的 y 输入值向前/向后移动,并根据您的 x 输入值向左/向右移动。

而不是检查是否按下了 W 或 S 或 A 或 D 键并确定在按下 D 时向右移动......您只需将 motionX 输入链接到您的对象 X 轴移动,将 moveY 输入链接到您的对象 Z 轴移动。

这只是关于你想做什么。您还可以根据需要自定义输入和对象移动。


推荐阅读