Kontroler postaci może pomóc Ci zaimplementować prostą fizykę ruchu w Twojej grze.
Do kontrolerów postaci Unity3D można podejść pod kilkoma kątami. Jeśli używasz biblioteki z potężnymi klasami i funkcjami, stworzenie kontrolera postaci opartego na fizyce może być fajnym miejscem do rozpoczęcia tworzenia gry.
Krok 1: Utwórz scenę z graczami i obiektami terenowymi
Po otwarciu Unity i utworzeniu nowego projektu możesz zacząć od dodania kilku obiektów do swojej sceny. Możesz tworzyć te obiekty w dowolnej kolejności, ale uważaj, aby upewnić się, że używasz właściwych ustawień. Chociaż ten projekt jest prosty, jest to świetny sposób zacznij od Unity.
Obiekt płaszczyzny 3D dla terenu
Pierwszym obiektem, który należy dodać do sceny, jest samolot. Kliknij prawym przyciskiem myszy wewnątrz okienka hierarchii, najedź kursorem Obiekt 3Di wybierz Samolot
z listy. Możesz dostosować rozmiar samolotu, aby zapewnić większy obszar testowy, ale nie musisz nic więcej z nim robić.Model odtwarzacza z obiektami typu Cube
Następnie nadszedł czas, aby dodać kostkę do sceny, która będzie działać jako model gracza. Kliknij prawym przyciskiem myszy wewnątrz okienka hierarchii, najedź kursorem Obiekt 3Di wybierz Sześcian z menu rozwijanego. Umieść nowy sześcian tak, aby znajdował się nad dodaną płaszczyzną. Musisz także dodać komponent sztywnego ciała, aby sześcian stał się obiektem fizycznym.
Wybierz kostkę i przejdź do Inspektora. Kliknij Dodaj komponent u dołu okienka wyszukaj sztywny obiekt i wybierz Sztywne ciało z listy, gdy się pojawi. Zaznacz Użyj grawitacji zaznacz pole wyboru i pozostaw pozostałe ustawienia bez zmian.
Możesz znaleźć darmowe zasoby Unity online aby udoskonalić Twój projekt.
Kamera trzecioosobowa
Twoja scena powinna już mieć kamerę, której możesz użyć jako kamery trzeciej osoby. Ustaw kamerę tak, aby znajdowała się w wygodnej pozycji trzeciej osoby nad kostką. Przejdź do panelu hierarchii przed przeciągnięciem i upuszczeniem kamery na kostkę, aby utworzyć relację rodzic-dziecko. Po wykonaniu tej czynności kamera automatycznie podąży za kostką.
Szybki test
Chociaż twoja scena nie ma jeszcze żadnego kodu, możesz przetestować pracę, którą wykonałeś do tej pory. Kliknij Grać u góry ekranu, aby załadować grę. Powinieneś zobaczyć, jak sześcian spada i ląduje na samolocie, a kamera powinna śledzić spadający sześcian.
Krok 2: Skonfiguruj plik C#
Teraz czas na utworzenie pliku C#, abyś mógł zacząć programować jakiś ruch. Przejdź do sekcji Projekt, kliknij prawym przyciskiem myszy, najedź kursorem na Utwórz i wybierz z listy Folder. Nazwij folder Skrypty lub coś podobnego.
Przejdź do nowego folderu i powtórz proces, ale wybierz z listy opcję Skrypt języka C#. Możesz nadać temu plikowi dowolną nazwę, ale będzie to również nazwa głównej funkcji w nim zawartej. Upewnij się, że Twój nowy język C# wygląda tak.
za pomocą System. kolekcje;
za pomocą System. Kolekcje. Ogólny;
za pomocą Silnik Unity;publicznyklasaZnak_Kontrola: JednoZachowanie {
próżniaPoczątek() {
}
próżniaAktualizacja() {
}
}
Krok 3: Użyj C#, aby utworzyć ruch do przodu i do tyłu z prędkością
Przed dodaniem do funkcji w pliku skryptu zadeklaruj kilka zmiennych publicznych. Najpierw jest Rigidbody do przechowywania modelu gracza. Zadeklaruj również pływak, aby śledzić prędkość ruchu. Te zmienne znajdują się w klasie głównej, poza funkcjami.
publiczny Sztywne ciało sztywne;
publicznyplatforma prędkość;
Następnie nadszedł czas, aby dodać jedną linię kodu do funkcji Start. Wykorzystuje to deklarację GetComponent do przypisania komponentu sztywnego ciała sześcianu do utworzonej zmiennej sztywnego ciała.
próżniaPoczątek() {
sztywne ciało = GetComponent < Sztywne ciało > ();
}
Teraz możesz dodać kod, który sprawi, że Twój model gracza będzie się poruszał. Ten kod jest ładny i prosty; potrzebujesz tylko dwóch instrukcji if, jednej do ruchu do przodu i jednej do cofania się. Możesz użyć danych wejściowych. GetKey, aby określić, kiedy klawisz jest naciskany. W tym przypadku szukasz naciśnięć klawiszy W i S.
Naciśnięcie któregokolwiek z tych klawiszy dodaje siłę do sztywnego ciała sześcianu za pomocą sztywnego ciała. Dodaj siłę. Możesz obliczyć kierunek i prędkość dodanej siły, mnożąc jej położenie w osi Z (transform.forward) przez zmienną prędkości. Nie ma klasy transform.backward, której można by użyć do ruchu wstecz, ale można to osiągnąć, mnożąc transform.forward przez -1.
Jeśli (Wejście. Weź klucz(„w”)) {
sztywne ciało. AddForce (transform.forward * prędkość);
}
Jeśli (Wejście. Weź klucz("S")) {
sztywne ciało. AddForce((transform.forward * -1) * prędkość);
}
Zapisz plik C# i przejdź z powrotem do aparatu Unity. Znajdź skrypt w okienku projektu i przeciągnij go i upuść na model postaci Cube wewnątrz hierarchii, aby przypisać skrypt do tego obiektu. Po wybraniu kostki powinieneś zobaczyć skrypt jako komponent w okienku inspektora. Kliknij wewnątrz pola zmiennego ciała sztywnego i wybierz ciało sztywne sześcianu.
Możesz teraz użyć przycisku Graj, aby uruchomić grę i przetestować swój kod. Ale poczekaj! Jest pewien problem; Twoja kostka będzie się toczyć, zamiast poruszać się prosto do przodu. Wróć do inspektora Cube, znajdź komponent Rigidbody i zaznacz pola wyboru Freeze Rotation na osiach X i Z przed ponownym uruchomieniem gry. Teraz powinno działać.
Krok 4: Użyj C#, aby stworzyć skręt w lewo i w prawo z momentem obrotowym
W przeciwieństwie do poruszania się do tyłu i do przodu, obracanie modelu odtwarzacza Cube wymaga siły zwanej momentem obrotowym. Potrzebujesz do tego innej zmiennej: publicznego pływaka do przypisania wartości momentu obrotowego.
publicznyplatforma moment obrotowy;
Kod skrętu w lewo i prawo w tym skrypcie jest bardzo podobny do kodu używanego do poruszania się do przodu i do tyłu. Jest Jeśli instrukcja dla każdego kierunku, która szuka naciśnięć klawisza D (skręt w prawo) lub klawisza A (skręt w lewo).
Pierwszym krokiem w każdej instrukcji if jest określenie kierunku skrętu za pomocą danych wejściowych. GetAxis i przypisz wynik do zmiennej typu float. Następnie użyj sztywnego ciała. AddTorque, aby zastosować siłę obrotową do modelu postaci Cube, mnożąc moment obrotowy, obrót i oś Z sześcianu.
Jeśli (Wejście. Weź klucz("D")) {
platforma obrót = wejście. GetAxis("Poziomy");
sztywne ciało. AddTorque (transform.up * moment obrotowy * obrót);
}
Jeśli (Wejście. Weź klucz("A")) {
platforma obrót = wejście. GetAxis("Poziomy");
sztywne ciało. AddTorque (transform.up * moment obrotowy * obrót);
}
Zapisz swój kod i wróć do Unity, aby go przetestować. Możesz dostosować prędkość i czas przyspieszania rotacji modelu gracza, wybierając kostkę i edytując zmienne masy, oporu i momentu obrotowego sztywnego ciała w swoim skrypcie. Ten przykładowy projekt opiera się na 1 masie, 1 oporze i 2 momentach obrotowych.
Krok 5: Użyj C# do programowania skoków
Jako ostatni element tego kontrolera postaci Unity nadszedł czas, aby stworzyć swój skok. Tworzenie skoku jest bardziej złożone niż inne podstawowe elementy sterujące, nad którymi pracowałeś, biorąc pod uwagę, że skok musi mieć ograniczoną wysokość. Zacznij od dodania prywatnej zmiennej boolowskiej, aby śledzić, czy gracz skacze.
prywatnybool skacze = FAŁSZ;
Ta zmienna nic nie zrobi bez instrukcji, aby ją przetestować. W takim przypadku podstawowa instrukcja if sprawdzająca, czy zmienna jest fałszywa, załatwi sprawę. Dodanie tego samego warunku do innych ruchów, jeśli stwierdzenia powstrzymają gracza przed poruszaniem się podczas skoków.
Jeśli (! skacze) {
}
Dodanie tego samego warunku do innych ruchów, jeśli stwierdzenia powstrzymają gracza przed poruszaniem się podczas skoków.
Jeśli (Wejście. Weź klucz(„w”) &&! skacze) {
sztywne ciało. AddForce (transform.forward * prędkość);
}
W instrukcji !isJumping if potrzebna jest kolejna instrukcja if, tym razem do sprawdzania naciśnięcia klawisza przycisku skoku. Nadanie zmiennej isJumping wartości true jest pierwszą rzeczą do zrobienia w tej instrukcji if, po której następuje deklaracja sztywnego ciała.angularVelocity w celu usunięcia sił aktualnie działających na sześcian.
Teraz możesz użyć sztywnego ciała. Deklaracja AddForce, aby dodać siłę do sześcianu na jego osi Z, tworząc ruch skoku w górę. Wreszcie nadszedł czas, aby użyć deklaracji invoke do wywołania innej funkcji po 0,8 sekundy.
Jeśli (! skacze) {
Jeśli (Wejście. GetKeyDown("przestrzeń")) {
skacze = PRAWDA;
sztywne ciało. AddForce (transform.up * prędkość * 120);
sztywne ciało.prędkość kątowa = wektor3.zero;
Odwołać się(„Ustawiający_ruch”, 0.8 F);
}
}
Ta funkcja ustawia zmienną isJumping z powrotem na false, dzięki czemu ruch/skakanie jest ponownie możliwe, a 0,8-sekundowe opóźnienie zapobiega zbyt szybkiemu uruchomieniu.
próżniaMove_Setter() {
skacze = FAŁSZ;
}
Krok 6: Przetestuj swój kod kontrolera postaci
Zapisz plik i wróć do Unity, aby przetestować napisany kod. Podobnie jak większość kompilatorów, Unity dostarcza informacji o błędach i innych problemach z twoim kodem, aby ułatwić zobaczenie, co może wymagać zmian. Możesz zobaczyć pełny kod tego projektu na naszej stronie GitHub strona.
Tworzenie kontrolerów postaci Unity
Możesz wybierać spośród wielu różnych podejść podczas tworzenia kontrolera postaci w Unity. Korzystanie z fizyki jest jedną z opcji, ale jeśli chcesz, możesz także użyć wbudowanego systemu kontrolerów postaci.
Odkrywanie różnych opcji, takich jak ta, to świetny sposób na poznanie narzędzi takich jak Unity.