CharacterController.Move
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 37 z 56.
CharacterController to komponent Unity dla poruszającej się postaci: kapsuła, która porusza się tylko wtedy, gdy skrypt wywoła controller.Move(motion). motion to odległość, jaką należy pokonać w tej klatce, czyli prędkość pomnożona przez Time.deltaTime. Move przesuwa kapsułę wzdłuż ścian, zamiast przez nie, pozwala wchodzić na pochyłości o kącie do wartości Slope Limit (45 degrees) oraz na krawędzie o wysokości do wartości Step Offset (0.3 units). To nie jest Rigidbody: nie ma sił, grawitacji ani odbijania się, a nic jej nie popycha. Porusza się dokładnie tam, dokąd kieruje ją Move, czego wymagają precyzyjne sterowanie w grach.
Grawitację musisz dodać samodzielnie, podobnie jak wykrywanie podłoża. isGrounded ma wartość true, gdy ostatnie wywołanie Move dotknęło czegoś od spodu, więc ruch bez składowej skierowanej w dół nigdy nie wykrywa podłoża. Wywołanie Move z odległością mniejszą niż Min Move Distance kontrolera (0.001) nie robi nic, więc kontroler poruszający się tylko na boki zgłasza, że nie jest na podłożu, gdy tylko się zatrzyma. Ten kurier porusza się za pomocą strzałek i przy każdym ruchu lekko naciska w dół:
public class Courier : MonoBehaviour
{
public float speed = 6f;
CharacterController controller;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
move.y = -2f; // zawsze kieruj w dół, aby wykryć podłoże
controller.Move(move * Time.deltaTime);
if (!controller.isGrounded)
{
Debug.Log("Off the ground");
}
}
}Kapsuła zachowuje odstęp równy Skin Width (0.08) od tego, czego dotyka, więc kontroler o wysokości 2 units stojący na podłożu na wysokości y = 0 znajduje się na wysokości y = 1.08, a nie 1. Move zaczyna od miejsca, w którym fizyka ostatnio widziała kontroler, więc przypisanie mu wartości transform.position może zostać cofnięte przy następnym wywołaniu Move: aby go teleportować, ustaw controller.enabled = false, przesuń go, a następnie ponownie włącz.
Wyzwanie
ŚredniOdkrywca stoi na kamiennej platformie, za którą znajduje się ściana, a po lewej stronie jest przepaść. Napisz skrypt Explorer.cs dla obiektu Player, który ma komponent CharacterController. W Inspectorze ustawiono speed (4) i fallSpeed (3), a metoda Start() już pobiera kontroler i komponent Renderer odkrywcy.
- Strzałki (lub WASD), odczytywane za pomocą surowych osi, poruszają odkrywcą za pomocą
controller.Movez prędkościąspeedjednostek na sekundę: w lewo i w prawo wzdłuż osi x, w górę i w dół wzdłuż osi z. Ściana musi go zatrzymać. - Każdy ruch odbywa się również w dół z prędkością
fallSpeedjednostek na sekundę, dzięki czemu odkrywca pozostaje na platformie i spada z jej krawędzi. - Gdy kontroler dotyka podłoża, odkrywca ma kolor
Color.green; gdy nie dotyka podłoża —Color.red.
Naciśnij Play, podejdź do ściany i zejdź z krawędzi, a następnie naciśnij Check.
Spróbuj swoich sił
using UnityEngine;
public class Explorer : MonoBehaviour
{
public float speed = 4f;
public float fallSpeed = 3f;
CharacterController controller;
Renderer rend;
void Start()
{
controller = GetComponent<CharacterController>();
rend = GetComponent<Renderer>();
}
void Update()
{
// Poruszaj się za pomocą controller.Move, a następnie ustaw kolor odkrywcy na podstawie isGrounded
}
}
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 banku8Sterowanie postacią
CharacterController.MoveGrawitacja ręcznieSkakaniePopychanie obiektówPoruszanie się w kierunku patrzeniaPodsumowanie: podwójny skok