Trzy tory
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 27 z 60.
W tym rozdziale powstaje gra typu niekończący się biegacz. Biegacz pędzi drogą z trzema pasami i zmienia pasy, aby omijać nadciągające przeszkody. W kolejnych lekcjach droga będzie przyspieszać, na ekranie będzie wyświetlany przebyty dystans, zderzenie zakończy bieg, a przycisk pozwoli rozpocząć go ponownie, a najlepszy wynik zostanie zapisany. Biegacz nigdy nie porusza się do przodu: pozostaje w miejscu 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, a trzy ostatnie są na razie puste.
Biegaczem poruszającym się po pasach nie steruje się jak samochodem: zawsze znajduje się w jednym z kilku określonych miejsc. Zapisz to miejsce jako liczbę całkowitą, zmień tę liczbę po naciśnięciu klawisza i na jej podstawie oblicz pozycję. Platforma myjki do okien 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, podczas gdy GetKey dodawałoby piętro w każdej klatce, w której klawisz jest wciśnięty. Mathf.Clamp nie pozwala, by liczba wykraczała poza zakres pięter budynku, więc naciśnięcie strzałki w górę na najwyższym piętrze nic nie robi, a kolejne naciśnięcie strzałki w dół przenosi od razu na piętro 3. Mathf.MoveTowards przesuwa platformę w stronę 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
ŚredniSpraw, aby strzałki przesuwały biegacza między trzema pasami.
- W metodzie
Update()klasyRunnerwykonajlane--poInput.GetKeyDown(KeyCode.LeftArrow), a po naciśnięciu prawej strzałki —lane++. - Nie pozwól mu zjechać z drogi:
lane = Mathf.Clamp(lane, -1, 1);. - Skopiuj
transform.positiondop, przesuwajp.xw kierunkulane * laneWidthza pomocąMathf.MoveTowardsz prędkościąlaneSpeed * Time.deltaTime, a następnie przypiszpz powrotem.
Naciśnij „Graj”, kliknij grę i zmieniaj pasy: biegacz będzie się przesuwać. Następnie naciśnij „Sprawdź”.
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 przesuwaj się w kierunku współrzędnej x wybranego pasa
}
}
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski 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ąPoćwicz samodzielnie: Edytor online Unity