Ściany
Lekcja 4 z 14 w kursie Gra w Unity: Wąż 3D w Coddy.
Pola planszy obejmują zakres od -7 do 7 na osiach x i z. Gdy plansza jest wyśrodkowana na 0, jeden test obejmuje obie strony: Mathf.Abs(x) > 7 jest prawdziwe poza którąkolwiek krawędzią.
Sprawdź pole, na które głowa ma zaraz wejść, zanim się tam przesunie, aby wąż, który uderzy w ścianę, pozostał na ostatnim polu zamiast kończyć ruch wewnątrz krawędzi. Na mniejszej planszy z krawędzią na 4:
Vector3 next = transform.position + direction;
if (Mathf.Abs(next.x) > 4) { Die(); return; }
transform.position = next;Uderzenie w ścianę zatrzymuje węża na dobre. Zrobi to zmienna bool, którą Update() sprawdza jako pierwszą: return na początku pomija zarówno klawisze, jak i timer.
Wyzwanie
ŁatwyUderzenie w ścianę kończy grę.
- Dodaj
public int edge = 7;ipublic bool alive = true; - W
Step(), po ustawieniu kierunku, dodajVector3 next = transform.position + direction;. Jeśli obiekt znajdzie się poza planszą (Mathf.Abs(next.x) > edgelub poza nią wzdłuż osi z): wywołajDie()i zwróć sterowanie; w przeciwnym razie przesuń go do next. void Die() { alive = false; };Update()zaczyna się odif (!alive) return;
Naciśnij „Graj” i skieruj węża na ścianę: zatrzyma się na ostatnim polu. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
using UnityEngine.InputSystem;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // sekundy między dwoma krokami
private float timer;
private Vector3 direction = Vector3.right; // kierunek, w którym głowa poruszyła się w ostatnim kroku
private Vector3 nextDirection = Vector3.right; // skręt oczekujący na następny krok
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;
}
}
Wszystkie lekcje w sekcji Gra w Unity: Wąż 3D
Poćwicz samodzielnie: Edytor online Unity