C# 固定对角线运动

C# 固定对角线运动,c#,unity3d,C#,Unity3d,我需要帮助固定我的对角线运动。它沿对角线方向的速度比水平或垂直方向的速度快 我正在制作一个等距3D游戏。我使用的是Unity 2019.4 无论如何,这是我的代码: if (canMove) { Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); Vector3 rightMovement = right * moveSp

我需要帮助固定我的对角线运动。它沿对角线方向的速度比水平或垂直方向的速度快

我正在制作一个等距3D游戏。我使用的是Unity 2019.4

无论如何,这是我的代码:

if (canMove)
{
 Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
 Vector3 rightMovement = right * moveSpeed * Time.deltaTime * Input.GetAxis("Horizontal");
 Vector3 upMovement = forward.normalized * moveSpeed * Time.deltaTime * Input.GetAxis("Vertical");

 Vector3 heading = Vector3.Normalize(rightMovement + upMovement);

 transform.forward = heading;
 transform.position += rightMovement;
 transform.position += upMovement;
}

问题中的第一条主要线索应该是,你计算了一个
方向
向量,但从未实际使用过它。这并不是那么糟糕(浪费,但不是世界末日),除了另一个主要问题是计算
rightmotation
upMovement
的值不同

在我看来,代码可以大大简化,有两个好处:提高效率,以及更容易获得正确的结果。如果没有代码,就不可能确定正确的代码是什么,但我希望这在您的情况下起作用:

if(可移动)
{
transform.forward=新矢量3(Input.GetAxis(“水平”),0,Input.GetAxis(“垂直”))。标准化;
transform.position+=transform.forward*moveSpeed*Time.deltaTime;
}

重要提示:代码并不总是通过添加更多的代码而变得更好。在调试过程中,通过实验添加一些语句来进行尝试是可以的,但通常情况下,继续添加越来越多的语句是不好的。如果某项工作不起作用,请查看已有的陈述,并找出如何使其更好(即使其发挥作用),而不是试图用更多的语句来修复它们的任何错误。

我对Unity不是很熟悉,但只要看看你的代码,我就会发现你规范化了
向前
来计算
向上移动
,而不是
向右移动
,你只需要考虑对角线移动对于您移动的每个水平和垂直方向,约为.77。像素是正方形的,因此这会使其在对角线方向上的移动速度更快,因为像素在对角线方向上比水平方向或垂直方向上更长。我不知道你为什么有这么多变量。我认为你只需要将你的方向添加到你的位置上。
Vector3.标准化(右移+上移)。标准化
你能通过标准化向量的次数获得报酬吗?盲目。拉马奥。我甚至没有意识到我已经正常化了两次,没有帮助我。它只是停止了移动。@Santeri抱歉,小的输入错误(这就是没有MCVE的问题…没有实际的方法来测试发布的代码)。我省略了关键的
+
操作符来更改
位置
向量。我已经修复了上面的代码示例。仍然没有规范化。对不起,我不知道你的意思。
前进
矢量是标准化的,但运动本身必须根据时间和速度进行缩放。如果上面没有解决你的问题,考虑改进问题,所以它包括所有的相关细节。当无法实际调试其他人的代码时(即通过运行代码并查看哪些代码不起作用),很难调试其他人的代码。