Menu
CoddyTech

As paredes

Lição 4 de 14 do curso Jogo 3D da Cobrinha na Unity da Coddy.

As células do tabuleiro vão de -7 a 7 nos eixos x e z. Com o tabuleiro centralizado em 0, um teste cobre os dois lados: Mathf.Abs(x) > 7 é verdadeiro além de qualquer uma das bordas.

Teste a célula em que a cabeça está prestes a entrar, antes que ela se mova até lá, para que uma cobra que atinja uma parede permaneça na última célula em vez de terminar dentro da borda. Em um tabuleiro menor, com limite 4:

Vector3 next = transform.position + direction;
if (Mathf.Abs(next.x) > 4) { Die(); return; }
transform.position = next;

Atingir uma parede para a cobra de vez. Uma bool que Update() testa primeiro faz isso: um return no início ignora tanto as teclas quanto o temporizador.

challenge icon

Desafio

Fácil

Bater em uma parede encerra o jogo.

  1. Adicione public int edge = 7; e public bool alive = true;
  2. Em Step(), depois de definir a direção, Vector3 next = transform.position + direction;. Fora do tabuleiro (Mathf.Abs(next.x) > edge, ou z): Die() e retorne; caso contrário, mova-se para next.
  3. void Die() { alive = false; }; Update() começa com if (!alive) return;

Pressione “Jogar” e conduza a cobra até uma parede: ela para na última célula. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;
using UnityEngine.InputSystem;

public class Snake : MonoBehaviour
{
    public float tick = 0.15f;   // segundos entre dois passos
    private float timer;
    private Vector3 direction = Vector3.right;       // a direção em que a cabeça se moveu no último passo
    private Vector3 nextDirection = Vector3.right;   // a mudança de direção aguardando o próximo passo

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard != null)
        {
            if (keyboard.upArrowKey.wasPressedThisFrame || keyboard.wKey.wasPressedThisFrame) Turn(Vector3.forward);
            if (keyboard.downArrowKey.wasPressedThisFrame || keyboard.sKey.wasPressedThisFrame) Turn(Vector3.back);
            if (keyboard.leftArrowKey.wasPressedThisFrame || keyboard.aKey.wasPressedThisFrame) Turn(Vector3.left);
            if (keyboard.rightArrowKey.wasPressedThisFrame || keyboard.dKey.wasPressedThisFrame) Turn(Vector3.right);
        }

        timer += Time.deltaTime;
        if (timer >= tick)
        {
            timer -= tick;
            Step();
        }
    }

    void Turn(Vector3 newDirection)
    {
        if (newDirection != -direction)
        {
            nextDirection = newDirection;
        }
    }

    void Step()
    {
        direction = nextDirection;
        transform.position += direction;
    }
}

Todas as lições de Jogo 3D da Cobrinha na Unity

Pratique por conta própria: Playground de Unity