Menu
CoddyTech

Plansza

Lekcja 1 z 14 w kursie Gra w Unity: Wąż 3D w Coddy.

W tym kursie zbudujesz Snake’a w 3D: węża z sześcianów na planszy 15 na 15, widzianej z góry. Porusza się o jedno pole naraz, skręca za pomocą strzałek lub WASD, zjada jedzenie, rośnie i ginie po zetknięciu ze ścianą lub własnym ogonem. Działają tu dwa skrypty: Snake na głowie oraz GameManager, który pozostaje pusty, dopóki jedzenie nie pojawi się w następnym rozdziale.

Pola mają szerokość jednej jednostki i są wyśrodkowane na liczbach całkowitych: współrzędne x i z mieszczą się w zakresie od -7 do 7, a każde pole znajduje się na wysokości y 0. Wąż nigdy nie ślizga się między polami. Przeskakuje o całe pole w każdym taktu, czyli w stałym rytmie, na przykład co 0.15 sekundy, a pomiędzy nimi stoi nieruchomo.

Rytm w Unity to timer: dodawaj Time.deltaTime w każdej klatce, a gdy timer osiągnie wyznaczony interwał, wykonaj działanie i odejmij od niego ten interwał. Ta lampka miga raz na sekundę:

public Light beacon;
public float interval = 1f;
private float timer;

void Update()
{
    timer += Time.deltaTime;
    if (timer >= interval)
    {
        timer -= interval;
        beacon.enabled = !beacon.enabled;
    }
}

Odejmowanie interwału zamiast ustawiania timera z powrotem na 0 pozwala zachować część klatki, która wykroczyła poza interwał, dzięki czemu rytm nie zaczyna się opóźniać.

challenge icon

Wyzwanie

Łatwy

Głowa to zielony sześcian na komórce (-3, 0, 0). Snake ma tick równy 0.15 sekundy oraz direction o wartości Vector3.right.

  1. Dodaj private float timer;.
  2. W Update() zwiększaj wartość timera o Time.deltaTime. Gdy osiągnie wartość tick, odejmij od niego tick i wywołaj Step().
  3. W Step() przesuń głowę o jedną komórkę wzdłuż direction.

Naciśnij Play i obserwuj, jak głowa przesuwa się w prawo. Na razie opuszcza planszę: ściany pojawią się w lekcji 4. Następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;

public class Snake : MonoBehaviour
{
    public float tick = 0.15f;   // sekundy między dwoma krokami
    private Vector3 direction = Vector3.right;

    void Update()
    {
        // Co tick sekund wykonaj jedno Step()
    }

    void Step()
    {
        // Przesuń głowę o jedną komórkę wzdłuż direction
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra w Unity: Wąż 3D