Menu
CoddyTech

Sem retorno

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

Uma cobra que vira diretamente para trás acaba atingindo o próprio pescoço, então uma virada para a direção oposta é ignorada. O oposto de uma direção é o seu negativo: enquanto a cobra se move para a direita, -direction é Vector3.left.

Comparar com direction não é suficiente quando um pressionamento a altera imediatamente: movendo-se para a direita, o jogador toca para cima e, em seguida, para a esquerda, dentro de um único ciclo. A direção para cima é permitida; depois, a direção para a esquerda é comparada com a direção para cima e também é permitida, e o próximo movimento volta pelo pescoço.

Então, mantenha duas direções: direction, o caminho que a cabeça percorreu por último, e nextDirection, a virada que está aguardando o próximo movimento. Uma tecla altera nextDirection depois de compará-la com direction, e o movimento torna real a virada que estava aguardando.

challenge icon

Desafio

Fácil

Impeça a cobra de virar diretamente de volta para o próprio pescoço.

  1. Adicione private Vector3 nextDirection = Vector3.right; e void Turn(Vector3 newDirection): defina nextDirection, a menos que newDirection == -direction.
  2. Em Update(), cada tecla chama Turn com a direção correspondente, em vez de definir direction.
  3. No início de Step(), defina direction = nextDirection;

Pressione “Jogar” e pressione a tecla de seta para a esquerda enquanto se move para a direita: a cobra continua indo para a direita. 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;

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

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

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

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

Pratique por conta própria: Playground de Unity