首页 > 解决方案 > 团结一致的运动;非对角线,类似塞尔达

问题描述

因此,我正在使用 Unity 和 Visual Studio 进行测试,作为一个入门项目,我正在努力复制 Zelda (NES),并且从运动开始。

到目前为止,有很多卡顿,我已经想出了如何防止对角线移动,但我无法弄清楚下一部分。在游戏中,如果有 2 个输入时倾向于垂直移动,但如果你撞到墙,它会让你水平移动,直到没有任何东西阻挡你的垂直移动。

我什至不知道该怎么做。任何人都有可以为我设定正确方向的想法?或者也许只是一种更好的方法?我还在学习 C#

public float MoveSpeed;
public Rigidbody2D rb;
Vector2 movement;

void Update() {
    MovementInput();
}

private void FixedUpdate() {
    rb.velocity = movement * MoveSpeed;
}

void MovementInput() {
    float mx = Input.GetAxisRaw("Horizontal");
    float my = Input.GetAxisRaw("Vertical");

    //This makes diagonal impossible, favoring vertical.
    if (my != 0) {
        mx = 0;
    }

    movement = new Vector2(mx, my).normalized;
}

标签: c#visual-studiounity3d

解决方案


尝试比较横轴和纵轴的绝对值。最高的会给你一个好的方向。

if (Math.Abs(my) > Math.Abs(mx)) {
    // up or down
} else {
    // left or right
}

推荐阅读