【问题标题】:Unity - How to move diagonallyUnity - 如何沿对角线移动
【发布时间】:2017-06-14 04:10:27
【问题描述】:

我已经定义了向前移动和向左移动。我如何使它对角线(向左和向上移动)?谢谢转发。

if (Input.GetKey(KeyCode.W))
    {
        player.MovePosition(transform.position + transform.forward * speed * Time.deltaTime);
    }

    if(Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.A))
    {
        ???
    }

    if (Input.GetKey(KeyCode.A))
    {
        player.MovePosition(transform.position - transform.right * speed * Time.deltaTime);
    }

【问题讨论】:

  • 不需要定义它,如果你同时按下W和A,那么if都会被应用并且对象会沿对角线移动。
  • 不。它没有。
  • 调试代码并验证它是否在两个 IF 上都输入,应该足够了。
  • 我已经测试过了,还是不行。我必须做一个双向运动,因为系统不理解两种 MovePositions。
  • @Gusman MovePosition 每次 FixedUpdate 只调用一次

标签: c# unity3d


【解决方案1】:

值得注意的是,由于 Rigidbody.MovePosition() 的怪癖,您当前的代码无法正常工作 - 它的文档没有提到它,但对于 the 2D variant of the method,它提到了

实际位置变化只会在下一次物理更新期间发生,因此重复调用此方法而不等待下一次物理更新将导致使用最后一次调用。

因此,虽然在按下两个键时都会输入两个 if 语句,但只有最后一个中的 MovePosition() 会生效。

为了解决这个问题,我的建议是计算组合运动矢量,而不是立即调用MovePosition()。然后,在最后应用移动向量,因此您只需要调用一次MovePosition()

Vector3 totalMovement = Vector3.zero;

if (Input.GetKey(KeyCode.W))
{
    totalMovement += transform.forward;
}
if (Input.GetKey(KeyCode.A))
{
    totalMovement -= transform.right;
}

// To ensure same speed on the diagonal, we ensure its magnitude here instead of earlier
player.MovePosition(transform.position + totalMovement.normalized * speed * Time.deltaTime);

希望这会有所帮助!如果您有任何问题,请告诉我。

【讨论】:

  • 谢谢!这解决了我的问题。我还为左右移动添加了旋转移动,以便玩家可以转身。
  • 太棒了!很高兴我能提供帮助。
【解决方案2】:

如果您真的想保持当前的结构,那么这就是您所需要的:

if(Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.A))
{
    player.MovePosition(transform.position + (transform.forward - transform.right).normalized * speed * Time.deltaTime);
}

Unity 支持向量加法,因此您可以简单地将它们相加。您还需要确保一旦调用了这个 if 语句,其他任何人都没有机会检查。

但是,我建议查看http://answers.unity3d.com/questions/566046/diagonal-movement.html 以获得更清洁的解决方案。 Gusman 是对的,有很多方法可以在不明确定义每种情况的情况下做到这一点。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2013-08-09
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多