Движение в единстве; Без диагонали, как у Зельды

avatar
austsiannodel
1 июля 2021 в 21:17
68
1
1

Итак, я тестирую Unity и Visual Studio, и в качестве стартового проекта я работаю над воспроизведением Zelda (NES) и начинаю с движения.

До сих пор, с большим количеством рывков, я выяснил, как предотвратить диагональное движение, но у меня возникли проблемы с определением следующей части. В игре if предпочитает вертикальное движение, когда есть 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;
}
Источник
Tim Hunter
1 июля 2021 в 21:43
0

Если я правильно помню, Axis имеет значение от -1 до 1. Возможно, стоит подумать о том, чтобы взять значения X и Y, использовать Mathf.Abs, а затем посмотреть, что больше, чтобы увидеть, что должно быть применены вместо этого. Нужно будет учитывать, когда они равны, но должно быть гораздо меньшее смещение движения.

Ответы (1)

avatar
Orkad
1 июля 2021 в 22:11
0

Попробуйте сравнить абсолютное значение горизонтальной и вертикальной осей. Высшее даст вам правильное направление.

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