Czy jesteś nowy w Unity? Chcesz dowiedzieć się, jak pobierać informacje od graczy i przesuwać postacie po ekranie? Stworzyliśmy ten przewodnik, aby pokazać trzy różne sposoby kontrolowania ruchu gracza w Unity.
Niezależnie od tego, czy dopiero zaczynasz programować, czy masz już pewne doświadczenie za pasem, ten samouczek C# sprawi, że staniesz na nogi, a Twoje postacie staną na nogi.
Zacznijmy.
Ruch gracza w jedności: zbieranie danych wejściowych
Po pierwsze, musisz wiedzieć, jak przechwytywać dane wejściowe od użytkownika i przekształcać je w ruch w grze. Unity sprawia, że jest to całkiem proste, o ile wiesz, gdzie szukać.
Przy otwartej Unity kliknij Edytować na górnym pasku narzędzi. Teraz wybierz Ustawienia projektu. Z listy po lewej stronie wybierz Menedżer wprowadzania. Wybierz Osie, wypełniając listę wartości wejściowych. Będziesz chciał spojrzeć Poziomy oraz Pionowy do podstawowego ruchu.
Będziesz używać tych osi wraz z Wejście. GetAxisRaw(); dla podstawowego ruchu w następnej sekcji.
Ruch gracza w jedności za pomocą sztywnego korpusu i zderzacza
Teraz, gdy znasz nazwy osi, możesz ich używać do kontrolowania ruchu gracza.
W Twoim projekcie Unity Hierarchia zobacz, kliknij prawym przyciskiem myszy i wybierz Obiekt 3D > Kapsuła by stworzyć to, na czym obdarzysz się ruchem. Upewnij się, że używasz tej samej taktyki, aby stworzyć teren Samolot aby Twoja Kapsuła mogła stać.
Pamiętaj, aby zresetować Przekształcać wartość obu obiektów i przesuń Kapsułę tak, aby stała na samolocie. Zmień nazwę swojej kapsuły na coś w rodzaju „Gracz”, aby ułatwić identyfikację.
Związane z: 5 języków tworzenia gier Unity: których powinieneś się nauczyć?
Kliknij na Gracz obiekt i, w Inspektor zobacz, przewiń w dół do Dodaj komponent. Dodać Sztywny korpus, a następnie dodaj kolejny składnik jako a Zderzacz kapsułek tym razem. Będziesz potrzebować tych komponentów, aby dodać fizykę, a tym samym ruch, do swojego Gracz.
Następnie kliknij prawym przyciskiem myszy swój Skrypty folder i Tworzyć nowy Skrypt C#. Nazwij ten skrypt czymś w rodzaju „Ruch gracza”. Jeśli planujesz dodać wiele rodzajów ruchu dla różnych postaci lub typów kontrolerów, będziesz chciał stworzyć wiele różnych skryptów dla każdego typu ruchu. Na razie skupimy się na podstawach i użyjemy jednego skryptu.
Zobacz też: Co to jest programowanie modułowe w Unity i dlaczego jest ważne?
Kliknij dwukrotnie swój skrypt, aby go otworzyć. Spotkasz się z domyślnym skryptem Unity:
za pomocą systemu. Kolekcje;
za pomocą systemu. Kolekcje. Ogólny;
za pomocą UnityEngine;
public class PlayerMovement: MonoBehaviour
{
// Start jest wywoływany przed pierwszą aktualizacją ramki
nieważny Start()
{}
// Aktualizacja jest wywoływana raz na klatkę
nieważna aktualizacja()
{
}
}
Możesz usunąć za pomocą systemu. Kolekcje; oraz za pomocąSystem. Kolekcje. Ogólny; ponieważ nie są potrzebne w tym skrypcie.
Pomijając to, skup się na
public class PlayerMovement: MonoBehaviour {
Na razie. Wewnątrz otwierającego się nawiasu klamrowego utwórz publiczny pływak nazwa zmiennej prędkość lub coś podobnego. Ten prędkość zmienna jest mnożnikiem, który kontroluje, jak szybko nasza Gracz porusza się po kilku dodatkowych programach. Na razie ustaw prędkość równy czemuś jak 10f.
Musisz także pozwolić Unity, aby w tym skrypcie manipulował Rigidbody. Odbywa się to za pomocą słowa kluczowego Sztywny korpus i nazwę zmiennej — wybierzemy rb.
public class PlayerMovement: MonoBehaviour
{
publiczna prędkość pływania = 10f; //Kontroluje mnożnik prędkości
sztywny korpus rb; //Skrypt mówi, że istnieje sztywny korpus, możemy użyć zmiennej rb, aby odnieść się do niego w dalszym skrypcie
To wszystko, co musisz dodać w tej sekcji. Teraz przejdź do nieważny Start(). Po uruchomieniu gry musisz ustawić rb zmienna równa Sztywny korpus na Gracz jak tak:
nieważny Start()
{
rb = GetComponent(); //rb równa się sztywnemu ciału odtwarzacza
}
Teraz spójrz na nieważna aktualizacja() funkcjonować. Jest to funkcja, której będziesz używać do ciągłego pobierania danych wejściowych z klawiatur graczy, kontrolerów itp. Pamiętaj, kiedy sprawdzałeś Ustawienia projektu dla Osie wejściowe? Użyjesz ich tutaj.
nieważna aktualizacja()
{
float xMove = Wejście. GetAxisRaw("Poziomo"); // klawisz d zmienia wartość na 1, klawisz zmienia wartość na -1
float zMove = Wejście. GetAxisRaw("Pionowo"); // klawisz w zmienia wartość na 1, klawisz s zmienia wartość na -1
rb.velocity = new Vector3(xMove, rb.velocity.y, zMove) * prędkość; // Tworzy prędkość w kierunku wartości równej naciśnięciu klawisza (WASD). rb.velocity.y zajmuje się spadaniem + skakaniem poprzez ustawienie prędkości na y.
}
Nie martw się, jeśli czujesz się przytłoczony skokiem w kodzie; wyjaśnimy to krok po kroku. Najpierw utwórz pływak zmienna o nazwie takiej jak xPrzesuńi ustaw ją na Wejście. GetAxisRaw("Poziomo");
Wejście. GetAxisRaw(); jest sposobem Unity na nagrywanie danych wejściowych odtwarzacza z Osie znalazłeś w Ustawienia projektu. Więcej na ten temat przeczytasz w Oficjalna dokumentacja Unity. "Poziomy" pochodzi z Pozioma oś imię w Jedności. Ta oś steruje ruchem w lewo iw prawo za pomocą klawiszy „a” i „d”.
Jak już pewnie się domyślasz, float zMove = Wejście. GetAxisRaw("Pionowo");
robi to samo, ale dla klawiszy „w” i „s”.
Związane z: Najlepsze samouczki Unity 3D dla początkujących
Następnie umieścisz to prędkość zmienną, którą utworzyłeś w grze, i ukończ ostatni element układanki dla ruchu gracza w Unity.
rb.velocity = new Vector3(xMove, rb.velocity.y, zMove) * prędkość; // Tworzy prędkość w kierunku wartości równej naciśnięciu klawisza (WASD). rb.velocity.y zajmuje się spadaniem + skakaniem poprzez ustawienie prędkości na y.
Wróć do Unity Inspektor widok na Gracz obiekt. Spójrz na Sztywny korpus-pod Informacje, zobaczysz wartość Prędkość. To jest wartość, na którą kierujesz reklamy rb.prędkość.
nowy Vector3(xMove, rb.velocity.y, zMove) * prędkość, tworzy nowy wektor z podanymi wartościami x, y i z, a następnie mnoży wartość wektora przez prędkość.
Pamiętaj, aby przeciągnąć Ruch Gracza skrypt na Gracz obiekt w Unity i to wszystko! W sumie masz działający skrypt C#, który pobiera dane wejściowe od gracza i przekształca je w ruch postaci w Unity.
Oto gotowy kod:
za pomocą UnityEngine;
public class PlayerMovement: MonoBehaviour
{
publiczna prędkość pływania = 10f; //Kontroluje mnożnik prędkości
sztywny korpus rb; //Skrypt mówi, że istnieje sztywny korpus, możemy użyć zmiennej rb, aby odnieść się do niego w dalszym skrypcie// Start jest wywoływany przed pierwszą aktualizacją ramki
nieważny Start()
{
rb = GetComponent(); //rb równa się sztywnemu ciału odtwarzacza
}// Aktualizacja jest wywoływana raz na klatkę
nieważna aktualizacja()
{
float xMove = Wejście. GetAxisRaw("Poziomo"); // klawisz d zmienia wartość na 1, klawisz zmienia wartość na -1
float zMove = Wejście. GetAxisRaw("Pionowo"); // klawisz w zmienia wartość na 1, klawisz s zmienia wartość na -1
rb.velocity = new Vector3(xMove, rb.velocity.y, zMove) * prędkość; // Tworzy prędkość w kierunku wartości równej naciśnięciu klawisza (WASD). rb.velocity.y zajmuje się spadaniem + skakaniem poprzez ustawienie prędkości na y.
}
}
Notatka: Jeśli zauważysz, że twoja postać robi więcej flopa niż cokolwiek innego, pamiętaj, aby zablokować rotację gracza w Inspektor.
Ucz się i rób więcej w jedności
Teraz, kiedy już wiesz, jak zaprogramować ruch gracza w Unity za pomocą komponentów Rigidbody i Collider, czego nauczysz się dalej? Być może rozszerzenie kontrolera ruchu, aby dodać takie rzeczy, jak przesuwanie, podwójne skoki i inne, byłoby zabawne i wciągające.
Unity Learn jest pełen interesujących tematów, które pomogą rozwinąć Twoje umiejętności w zakresie tworzenia gier. Wierzymy, że jednym z najważniejszych czynników poszerzania wiedzy o programowaniu jest uczenie się czegoś nowego każdego dnia. Pozostań ciekawy i szczęśliwy w hakowaniu!
Chcesz zacząć tworzyć własne gry? Unity Learn to najlepszy i najłatwiejszy sposób na naukę i opanowanie tego, co musisz wiedzieć.
Czytaj dalej
- Programowanie
- Produkcja gier
- Jedność
- Programowanie
Marcus jest niezależnym dziennikarzem technicznym i młodszym redaktorem ds. programowania w MUO. Jest uczniem przez całe życie, hobbystycznym programistą front-end i pisarzem opowiadań z ponad 3-letnim doświadczeniem w tworzeniu prozy, która informuje czytelników.
Zapisz się do naszego newslettera
Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!
Kliknij tutaj, aby zasubskrybować