Trasa
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 48 z 56.
W tym rozdziale powstaje platformówka 3D. Biegasz i skaczesz po unoszących się platformach, jedziesz na jednej, która się przesuwa, dotykasz punktów kontrolnych, aby upadek nie odsyłał cię na początek, zbierasz klejnoty zliczane na ekranie, przekraczasz linię mety, aby przejść do następnego poziomu, i próbujesz pobić swój najlepszy czas. Gra składa się z pięciu skryptów, które są w projekcie od samego początku: Player, MovingPlatform, Checkpoint, Gem i FinishLine. Cztery ostatnie są na razie puste, a w każdej lekcji wypełnisz jeden z nich. Gracz używa komponentu CharacterController sterowanego za pomocą akcji Input System, a kamera jest jego obiektem podrzędnym, więc podąża za nim bez użycia skryptu.
CharacterController porusza się na dwa sposoby. Move(motion) przesuwa go o zadaną odległość i niczego nie dodaje, więc grawitacja, skoki i Time.deltaTime należą do zadań skryptu, jak w rozdziale o Character Controller. SimpleMove(speed) przyjmuje prędkość w jednostkach na sekundę, samodzielnie skaluje ją czasem trwania klatki i dodaje grawitację; ignoruje przekazaną wartość y, więc postać poruszana w ten sposób spada z krawędzi, ale nigdy nie może skakać. Ten owczarek w grze pasterskiej oglądanej z góry nie musi skakać, więc SimpleMove i akcja Move stanowią 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ę: chodzenie i spadanie odbywają się w tym samym wywołaniu, a isGrounded opisuje wtedy cały ten ruch.
Wyzwanie
ŚredniRozpocznij tworzenie platformówki od gracza. Skrypt Player ma speed (5), jumpHeight (1.5) i gravity (-9.81), controller oraz velocity odpowiadające za spadanie. Znajdź akcje Move i Jump tylko raz, w Start, a w Update:
- Move porusza graczem z prędkością
speedjednostek na sekundę: w prawo i w lewo wzdłuż osi x, do przodu i do tyłu wzdłuż osi z. - Grawitacja dodaje
gravity * Time.deltaTimedovelocity.yw każdej klatce. Gdy kontroler jest na ziemi, avelocity.yjest mniejsze od 0, najpierw ustawvelocity.yna -2, aby gracz pozostał dociśnięty do ziemi. - Każde naciśnięcie Jump, gdy gracz jest na ziemi, ustawia
velocity.ynaMathf.Sqrt(jumpHeight * -2f * gravity): skok na wysokośćjumpHeightjednostek. Przytrzymanie Jump powoduje jeden skok, a skakanie w powietrzu jest niemożliwe. - Wywołaj
controller.Movetylko raz, przekazując łącznie ruch ivelocity, pomnożone przezTime.deltaTime.
Naciśnij Play i przeskocz na pierwsze platformy, a następnie wybierz Check.
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
}
}
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 banku