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.
Wyzwanie
ŚredniRozpocznij 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
laneo jeden w odpowiednim kierunku. Przytrzymanie klawisza nadal zmienia ją tylko o jeden. lanenigdy nie spada poniżej -1 ani nie przekracza 1.- Biegacz przesuwa się wzdłuż osi x do
lane * laneWidthz prędkościąlaneSpeedjednostek 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
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w banku3Menedżer gry
Jeden skrypt obsługuje gręSingletonStany gryInstrukcja switch dla stanuPowtórka: menedżer rund6Projekt: Niekończący się bieg
Trzy toryPrzeszkody przed tobą