Итак, я тестирую 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;
}
Если я правильно помню, Axis имеет значение от -1 до 1. Возможно, стоит подумать о том, чтобы взять значения X и Y, использовать Mathf.Abs, а затем посмотреть, что больше, чтобы увидеть, что должно быть применены вместо этого. Нужно будет учитывать, когда они равны, но должно быть гораздо меньшее смещение движения.