【问题标题】:Movement in unity; Non diagonal, zelda like团结一致的运动;非对角线,类似塞尔达
【发布时间】:2021-07-01 21:17:34
【问题描述】:

所以我正在使用 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;
}

【问题讨论】:

  • 如果我没记错的话,Axis 是一个介于 -1 和 1 之间的值。可能值得考虑同时采用 X 和 Y 值,使用Mathf.Abs,然后看看哪个更大应该改为应用它。需要考虑它们何时相等,但运动偏差应该小得多。

标签: c# visual-studio unity3d


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多