Menu
CoddyTech

Trzy tory

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 27 z 56.

W tym rozdziale zbudujesz Endless Runner. Biegacz pędzi drogą z trzema pasami i zmienia pasy, aby unikać przeszkód nadjeżdżających w jego stronę. W kolejnych lekcjach droga będzie przyspieszać, dystans będzie wyświetlany na ekranie, zderzenie zakończy bieg i pojawi się przycisk pozwalający pobiec ponownie, a najlepszy bieg zostanie zapisany. Biegacz nigdy nie porusza się do przodu: pozostaje na z = 0, a przeszkody przemieszczają się w jego stronę, więc droga nigdy się nie kończy. Gra ma cztery skrypty: Runner, Spawner, Obstacle i GameManager. Na razie trzy ostatnie są puste.

Biegacz poruszający się po pasach nie jest sterowany jak samochód: zawsze znajduje się w jednym z kilku określonych miejsc. Przechowuj to miejsce jako liczbę całkowitą, zmieniaj tę liczbę po naciśnięciu klawisza i na jej podstawie obliczaj pozycję. Platforma dla myjącego okna obsługuje pięć pięter budynku, oddalonych od siebie o 3 jednostki:

[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;

void Update()
{
    if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
    if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
    floor = Mathf.Clamp(floor, 0, 4);

    Vector3 p = transform.position;
    p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
    transform.position = p;
}

GetKeyDown sprawia, że jedno naciśnięcie oznacza przejazd o jedno piętro; w przypadku GetKey piętro zmieniałoby się przy każdej klatce, w której klawisz jest wciśnięty. Mathf.Clamp utrzymuje numer piętra w zakresie obejmującym piętra budynku, więc naciśnięcie klawisza w górę na najwyższym piętrze nic nie robi, a kolejne naciśnięcie klawisza w dół przenosi od razu na piętro 3. Mathf.MoveTowards przesuwa platformę w stronę jej piętra z prędkością moveSpeed jednostek na sekundę i zatrzymuje ją dokładnie na nim, zamiast przeskakiwać tam w jednej klatce. Pozycja jest kopiowana, zmieniana i przypisywana z powrotem, ponieważ nie można samodzielnie ustawić transform.position.y.

challenge icon

Wyzwanie

Średni

Rozpocznij Endless Runnera od biegacza. Inspektor nadaje Runner wartość laneWidth równą 2.5 i laneSpeed równą 15, a lane wynosi -1 dla lewego pasa, 0 dla środkowego i 1 dla prawego. W Update() klasy Runner:

  • Każde naciśnięcie strzałki w lewo lub w prawo zmienia lane o jeden w odpowiednim kierunku. Przytrzymanie klawisza nadal zmienia ją tylko o jeden.
  • lane nigdy nie spada poniżej -1 ani nie przekracza 1.
  • Biegacz przesuwa się wzdłuż osi x do lane * laneWidth z prędkością laneSpeed jednostek na sekundę, zachowując swoje wartości y i z.

Na razie pozostaw pozostałe trzy skrypty bez zmian. Naciśnij Play, kliknij grę i zmieniaj pasy, a następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;
    public float laneSpeed = 15f;
    private int lane = 0;   // -1 to lewy pas, 0 środkowy, 1 prawy

    void Update()
    {
        // Zmieniaj pasy za pomocą strzałek, a następnie płynnie przesuwaj się w kierunku współrzędnej x wybranego pasa
    }
}
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier