Запретить движение в противоположном направлении
Игра "ЗМЕЙКА" крашится если нажать на кнопку движения в противоположную сторону, как пофиксить?
Как изменить код, чтобы после нажатия "вверх" нельзя было поменять направление на "вниз", а
после нажатия "влево" нельзя было поменять направление на "вправо" и наоборот.
private void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
_direction = Vector2.up;
}
else if (Input.GetKeyDown(KeyCode.S))
{
_direction = Vector2.down;
}
else if (Input.GetKeyDown(KeyCode.A))
{
_direction = Vector2.left;
}
else if (Input.GetKeyDown(KeyCode.D))
{
_direction = Vector2.right;
}
}
Ответы (4 шт):
Автор решения: Yaroslav
→ Ссылка
private void SetDirection (Vector2Int direction)
{
if (_direction != -direction)
_direction = direction;
}
Автор решения: Yotic
→ Ссылка
private void Update()
{
Vector2 direction;
if (Input.GetKeyDown(KeyCode.W))
direction = Vector2.up;
else if (Input.GetKeyDown(KeyCode.S))
direction = Vector2.down;
else if (Input.GetKeyDown(KeyCode.A))
direction = Vector2.left;
else if (Input.GetKeyDown(KeyCode.D))
direction = Vector2.right;
if _direction != -direction {
_direction = direction
}
}
Автор решения: Andrew
→ Ссылка
Как-то так:
private void Update()
{
SetDirection();
}
private void SetDirection()
{
var newDirection = Vector2.zero;
var axisX = Input.GetAxis("Horizontal");
var axisY = Input.GetAxis("Vertical");
if (axisY > 0.5)
newDirection = Vector2.up;
else if (axisY < -0.5)
newDirection = Vector2.down;
else if (axisX > 0.5)
newDirection = Vector2.right;
else if (axisX < -0.5)
newDirection = Vector2.left;
else return;
if (_direction != -newDirection)
_direction = newDirection;
}
PS Код писался вслепую и могут быть какие-то логические или синтаксические ошибки.
Автор решения: y3x3la
→ Ссылка
private void Update()
{
// Only allow turning up or down while moving in the x-axis
if (direction.x != 0f)
{
if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow)) {
direction = Vector2.up;
} else if (Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.DownArrow)) {
direction = Vector2.down;
}
}
// Only allow turning left or right while moving in the y-axis
else if (direction.y != 0f)
{
if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) {
direction = Vector2.right;
} else if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) {
direction = Vector2.left;
}
}
}
Код был найден тут:
https://github.com/zigurous/unity-snake-tutorial/wiki#how-do-i-prevent-the-snake-from-turning-in-on-itself