Trasa
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 49 z 60.
W tym rozdziale powstaje platformówka 3D. Biegasz i skaczesz po unoszących się platformach, jedziesz na platformie, która się przesuwa, dotykasz punktów kontrolnych, żeby upadek nie odsyłał cię na początek, zbierasz klejnoty, których liczba jest wyświetlana na ekranie, przekraczasz linię mety, by przejść do następnego poziomu, i próbujesz pobić swój najlepszy czas. Gra składa się z pięciu skryptów, które znajdują się w projekcie od samego początku: Player, MovingPlatform, Checkpoint, Gem i FinishLine. Cztery ostatnie są na razie puste, a każda lekcja wypełnia jeden z nich. Gracz korzysta z komponentu CharacterController sterowanego akcjami z Input System, a kamera jest jego obiektem podrzędnym, więc podąża za nim bez skryptu.
Komponent CharacterController porusza się na dwa sposoby. Move(motion) przesuwa go o podaną odległość i niczego nie dodaje, więc grawitacja, skoki i Time.deltaTime należą do zadań skryptu, tak jak w rozdziale o Character Controllerze. SimpleMove(speed) przyjmuje prędkość w jednostkach na sekundę, samodzielnie skaluje ją na podstawie czasu trwania klatki i dodaje grawitację; ignoruje przekazaną wartość y, więc postać poruszana tą metodą spada z krawędzi, ale nigdy nie może skakać. Ten pies pasterski w grze o zaganianiu, widzianej z góry, nie musi skakać, więc SimpleMove i akcja Move składają się na cały jego skrypt:
using UnityEngine;
using UnityEngine.InputSystem;
public class Sheepdog : MonoBehaviour
{
[SerializeField] private float speed = 6f;
private CharacterController controller;
private InputAction moveAction;
void Start()
{
controller = GetComponent<CharacterController>();
moveAction = InputSystem.actions.FindAction("Move");
}
void Update()
{
Vector2 input = moveAction.ReadValue<Vector2>();
controller.SimpleMove(new Vector3(input.x, 0f, input.y) * speed);
}
}Gracz w platformówce musi skakać, więc przechowuje własną prędkość pionową i porusza się za pomocą Move, odczytując akcje Move i Jump zamiast klasy Input. Unity zaleca jedno wywołanie Move lub SimpleMove na klatkę: ruch i spadanie odbywają się w tym samym wywołaniu, a isGrounded opisuje wtedy cały ten ruch.
Wyzwanie
ŚredniSpraw, by postać chodziła, skakała i spadała.
- W
Start()znajdźMoveiJumpza pomocąInputSystem.actions.FindAction. - W
Update()chodź z prędkościąspeed: x elementu Move wzdłuż osi x, a jego y wzdłuż osi z. - Dodaj
gravity * Time.deltaTimedovelocity.y, a gdy postać jest na ziemi i spada, ustaw wartość na-2f. Skok, gdy postać jest na ziemi, ustawia ją naMathf.Sqrt(jumpHeight * -2f * gravity). - Wywołaj
controller.Move((move + velocity) * Time.deltaTime)jeden raz.
Naciśnij „Graj”: skocz na pierwszą platformę. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
[SerializeField] private float speed = 5f;
[SerializeField] private float jumpHeight = 1.5f;
[SerializeField] private float gravity = -9.81f;
private CharacterController controller;
private Vector3 velocity;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
// poruszaj się za pomocą akcji Move, skacz za pomocą akcji Jump, spadaj pod wpływem grawitacji
}
}
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 bankuPoćwicz samodzielnie: Edytor online Unity