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.
Desafio
FácilBater em uma parede encerra o jogo.
- Adicione
public int edge = 7;epublic bool alive = true; - 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. void Die() { alive = false; };Update()começa comif (!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