Tutorial Unity3d, czyli tworzymy własną grę FPS od podstaw z wykorzystaniem silnika Unity.

Temat: Jak stworzyć i dostosować system sterowania postacią

Spis treści

Jeżeli nie używałeś do tej pory Unity3d:

#0 – Podstawy Podstaw

FPS Tutorial:

#1 – Tworzenie nowego projektu i narzędzie terenu

#2 – Sterowanie postacią

#3 – Życie, pancerz i wytrzymałość postaci

#4 – Regeneracja życia i energii. Efekty trafienia.

#5 – Kamera z bronią i strzelanie

#6 – Przeładowanie broni i amunicja

#7 – Zbieranie przedmiotów

#8 – Druga broń

#9 – Rzut granatem i seria z karabinu

#10 – Celowanie i dziury po kulach

#11 – Przeciwnik z prostym AI, sztuczna inteligencja

#12 – Animacja postaci przeciwnika. Animator

#13 – Menu główne gry. GUI

#14 – Ostatnie szlify i budujemy projekt

Teoria

Dzięki wbudowanym package’om w Unity3d, stworzenie samej postaci jest bardzo proste. Ogólnie wychodzę z założenia, że w informatyce nie ma co wymyślać koła na nowo. Więc jeśli mamy gotową część systemu, która jest sprawdzona i w pełni funkcjonalna, nie ma sensu pisać wszystkiego od zera tracąc swój czas. Dlatego w tym tutorialu, stworzenie postaci, odbędzie się z wykorzystaniem gotowego modelu, a my skupimy się na jego konfiguracji. Więc ta część tutoriala będzie prosta i przyjemna.

Oczywiście, można powiedzieć, że pisząc wszystko od zera więcej się nauczymy. Możliwe, jednak funkcje, których byśmy do tego użyli i tak prędzej czy później do nas trafią. A napisanie, dobrego skryptu sterowania postacią to trudne zajęcie. Więc uważam, że lepiej nauczyć się używać tego co dali nam twórcy silnika.

Do dzieła!

Uwaga!

Jeśli używasz Unity3d 5.0 możesz zjechać na dół strony, gdzie omawiam Controller dla tej wersji Unity.

Stworzenie nowej postaci gracza

Opisałem to bardzo szybko w poprzedniej części, aby wykorzystać postać do testów. Jednak, z racji że jest to część kursu dla tego zagadnienia, powtórzę ten krok jeszcze raz. Jeśli masz już na scenie postać, którą możesz się poruszać, możesz pominąć ten krok.

Do sterowania w grze, twórcy Unity dostarczyli nam dwa kontrolery Third Person Controller i First Person Controller. Jak łatwo się domyślić, różnią się orientacją kamery, która przypada odpowiednio z 3 lub 1 osoby. Od wprowadzenia wsparcia dla gier 2D, dostępna jest również paczka z Controllerami na urządzenia mobilne.

Aby móc skorzystać z tych kontrolerów, musimy mieć zaimportowaną standardową paczkę Unity: Character Controller. Jeśli podążałeś dokładnie za tutorialem, to powinieneś mieć ją zaimportowaną przy tworzeniu projektu. W panelu Project odnajdź folder Standard Assets, a w nim folder Character Controller. Jeśli nie posiadasz tych folderów, to znaczy że paczka nie została zaimportowana.

Jeżeli nie masz jej zaimportowanej zrób to teraz wybierając z górnego menu: [Assets -> Import Package… -> Character Controller]. 

Zostało tylko dodać obiekt gracza. Z folderu Standard Assets -> Character Controllers w panelu Project, wybierz obiekt First Person Controller i przenieść go na panel scene, dodając go tym samym do gry.

First Person Controller, posiada swoją kamerę, która jest główną kamerą gry. W danej scenie, może być tylko jedna taka kamera. Dlatego sprawdź teraz panel Hierarchy, aby sprawdzić, czy po za kamerą Controllera nie ma innych kamer. Jeśli jakieś znajdziesz, po prostu je usuń.

Dostosowanie ustawień

Na obiekt gracza składają się dwa elementy: Kamera oraz obiekt kapsuły. Jeżeli postać gracza nie jest nigdy przez niego widziana, stosuje się taki zabieg, aby zredukować obliczenia wykonywane przez komputer przy renderingu, oraz zmniejszyć ilość pracy wykonywanej przez grafików. Kapsuła dobrze odzwierciedla wymiary gracza i nie potrzebujemy tutaj jego dokładnego modelu.

Tyle jeśli chodzi o obiekty. Jednak obiekt gracza, jako całości, posiada jeszcze 4 istotne komponenty:

  • Character Controller
  • Mouse Look (Script)
  • Character Motor (Script)
  • FPSInput Controller (Script)

Ostatni pomijamy, ponieważ nie ma on parametrów do dostosowania. A każdy z pozostałych omówimy.

Komponent Character Controller
Komponent Character Controller

Character Controller:

Standardowy kontroler postaci, opisujący ją paroma parametrami i umożliwiający poruszanie się, jeśli obiekt postaci nie korzysta z fizyki

  • Slope Limit – Kąt jaki może pokonać nasza postać. Domyślnie jest to 45 stopni. Jednak, jeśli tworzymy np. schody spiralne, nie jesteśmy w stanie załatwić sprawy za pomocą ściętego box collidera, a musimy się posłużyć mesh colliderem, wtedy jedyny sposób sprawienia, żeby nasza postać pokonała stopnie, to ustawienie kąta na 90 stopni.
  • Step Offset – Wysokość stopnia. Można to sobie (bardzo słusznie) porównać ze schodami. Oznacza to, jak wysoki może być stopień, aby postać normalnie na niego weszła.
  • Skin Width – Oznacza jak bardzo nasz collider może wejść w inny. Ustawienie tego parametru na za niski, może sprawić że nasza postać utknie. Dokumentacja zaleca trzymanie tego parametru na poziomie 10% promienia (o nim później)
  • Min Move Distance – Jeżeli nasza postać próbuje pokonać dystans mniejszy od wskazanego przez ten parametr, nie porusza się w ogóle.
  • Center – Określa gdzie znajduje się collider dla naszej postaci.
  • Radius – Jest to promień naszego collidera, czyli szerokość postaci.
  • Height – Oczywisty parametr, wysokość naszej postaci.
Tutorial_02_02
Komponent Mouse Look (Script)

Mouse Look

  • Axes – Określenie osi. W przypadku ustawienia parametru MouseX albo: MouseXandY, możemy w pełni manipulować kamerą. Dla ustawienia Mouse Y, kamerą możemy poruszać tylko w pionie.
  • Sensitivity X / Sensitivity Y – Czułość myszki dla odpowiednich osi.
  • Minimum X / Maximum X – Jak bardzo możemy się obracać w osi oX. Zakres -360 do 360 sprawia, że ograniczeń nie ma.
  • Minimum Y / Maximum Y – Jak bardzo możemy się obracać w osi oY. Domyślnie system przyjmuje wartości -60 do 60, sprawia to, że nie możemy nienaturalnie obracać się w osi oY, co w normalnym życiu sprowadzałoby się do robienia przewrotów.
Komponent Character Motor (Script)
Komponent Character Motor (Script)

Character Motor

  • Can Control – Czy skrypt ma reagować na urządzenia wejścia.
  • Use Fixed Update – ?

Movement

  • Max Forward/Backwards/Sideways Speed – Oczywisty parametr, czyli nasza maksymalna prędkość do przodu, do tyłu i na boki.
  • Slope Speed Multiplier Curve – Wykres reprezentujący zmianę prędkości w czasie, dla ześlizgiwania się z powierzchni. W przypadku na rysunku jest to szybki spadek, ze stopniowym hamowaniem w końcówce.
  • Max Ground/Air Acceleration – Z jaką maksymalną prędkością możemy przyspieszać, odpowiednio dla poruszania się po ziemi oraz w powietrzu.
  • Gravity – Siła przyciągania ziemskiego. Z racji, że postać nie posiada Rigidbody, nie reaguje na grawitację w świecie gry, stąd ten parametr do jej symulacji.
  • Max Fall Speed – Czyli z jaką maksymalną prędkością możemy spadać.

Jumping

  • Enabled – Czy nasza postać w ogóle może skakać.
  • Base Height – Jak wysoko możemy wyskoczyć.
  • Extra Height – Daje to efekt przedłużenia skoku. Jedno klepnięcie w klawisz skoku, spowoduje osiągnięcie Base Height, jeśli klawisz przytrzymamy, osiągniemy wysokość równą Extra Height.
  • Perp Amount – Jest to reakcja na wywołanie skoku, gdy postać znajduje na się na powierzchni, po której może chodzić, jednak nie jest ona idealnie prosta. Jeśli parametr jest równy 0, skok zawsze będzie po osi oY w górę, czyli całkowicie w pionie. Im większy parametr, tym bliżej będzie nam do skoku prostopadle do powierzchni, na której się znajdujemy. Maksymalna wartość to 1.
  • Steep Perp Amount – Bardzo zbliżony do poprzedniego parametru, jednak dotyczy sytuacji gdy znajdujemy się na powierzchni po której nie możemy się poruszać. Np. gdy ześlizgujemy się ze zbyt stromego zbocza. Tutaj również parametr przyjmuje wartości od 0 do 1.

Moving Platform

  • Enabled – Czy przebywanie postaci na poruszających się platformach, ma na nią wpływać.
  • Movement Transform – Mamy tutaj aż 4 wartości:
    • None – Prędkość platformy nie ma wpływu na wyskok
    • InitTransfer – Wyskok otrzymuje prędkość początkową z platformy, po czym stopniowo ta prędkość maleje
    • PermaTransfer – Wyskok otrzymuje prędkość początkową z platformy i utrzymuje ją aż do lądowania
    • PermaLocked – Wyskok jest względny do ruchu ostatnio dotkniętej platformy i będzie poruszał się razem z nią

Ogólnie ten parametr jest dość nietypowy i jego faktyczne zastosowanie, wymaga przetestowania, która opcja jest dla nas najlepsza. Jego jedynego nie testowałem w praktyce, dlatego opis jest tak bardzo ogólnikowy i niedokładny.

Sliding

  • Enabled – Czy dopuszczamy ześlizgiwanie się postaci ze stromych powierzchni.
  • Sliding Speed – Oczywiste, bazowa prędkość ześlizgiwania się.
  • Sideways Controll – Na ile jesteśmy w stanie kontrolować ruch postaci na boki, w czasie ześlizgiwania się. Parametr przyjmuje wartości od 0 do 1. I przedstawia się to mniej więcej, jako procent wartości sliding speed. Czyli jeśli tutaj ustawimy 0.5 a sliding speed na 10, to postać może poruszać się na boki z prędkością równą 5.
  • Speed Controll – Ten parametr określa jak bardzo możemy wpłynąć na prędkość ześlizgiwania się. Znów przyjmuje wartości od 0 do 1 i określa procentowy wpływ na sliding speed. Tzn. jeśli tu ustawimy wartość na 0.5 to możemy wpłynąć na sliding speed tak, że postać może poruszać się z wartością 150% lub 50% sliding speed. Więc jeśli sliding speed jest znów ustawione na 10, a tutaj mamy 0.5, to gracz może zredukować prędkość ześlizgiwania się do 5 lub zwiększyć do 15.

Unity3d 5.0

Jeżeli chodzi o Unity 5.0, również dysponujemy fajnym kontrolerem postaci z pierwszej osoby. Można też śmiało powiedzieć, że jest on lepszy i bardziej dopracowany od tego poprzedniego. Dlatego dodajemy obiekt o nazwie FPSController z folderu: Standard Assets / Characters / First Person Character / Prefabs. Drugi dostępny kontroler opiera się na Rigidbody, czyli steruje w nim zasadzie fizyka. My wykorzystamy sobie ten niefizyczny. Z czego się składa nasz kontroler?

Komponent Character Controller
Komponent Character Controller

Character Controller:

Standardowy kontroler postaci, opisujący ją paroma parametrami i umożliwiający poruszanie się, jeśli obiekt postaci nie korzysta z fizyki.

  • Slope Limit – Kąt jaki może pokonać nasza postać. Domyślnie jest to 45 stopni. Jednak, jeśli tworzymy np. schody spiralne, nie jesteśmy w stanie załatwić sprawy za pomocą ściętego box collidera, a musimy się posłużyć mesh colliderem, wtedy jedyny sposób sprawienia, żeby nasza postać pokonała stopnie, to ustawienie kąta na 90 stopni.
  • Step Offset – Wysokość stopnia. Można to sobie (bardzo słusznie) porównać ze schodami. Oznacza to, jak wysoki może być stopień, aby postać normalnie na niego weszła.
  • Skin Width – Oznacza jak bardzo nasz collider może wejść w inny. Ustawienie tego parametru na za niski, może sprawić że nasza postać utknie. Dokumentacja zaleca trzymanie tego parametru na poziomie 10% promienia (o nim później)
  • Min Move Distance – Jeżeli nasza postać próbuje pokonać dystans mniejszy od wskazanego przez ten parametr, nie porusza się w ogóle.
  • Center – Określa gdzie znajduje się collider dla naszej postaci.
  • Radius – Jest to promień naszego collidera, czyli szerokość postaci.
  • Height – Oczywisty parametr, wysokość naszej postaci.
FPS Controller z obiektu First Person Controller w Unity3d 5
FPS Controller z obiektu First Person Controller w Unity3d 5

First Person Controller 

Czyli skrypt, odpowiedzialny za możliwość poruszania naszej postaci.

  • IsWalking – Parametr na który nie mamy wpływu. Jeżeli zaznaczony to postać chodzi, jeśli nie, to biega. Co zmienia tylko prędkość poruszania postaci.
  • Walk Speed – Prędkość poruszania się postaci, gdy chodzi.
  • Run Speed – Prędkość poruszania się postaci, gdy biega.
  • Runstep Lenghten – Odległość kroku w biegu. Mówiąc kolokwialnie, będzie to szybkość z jaką nasza postać przebiera nóżkami. Żeby zrozumieć działanie tego parametru, najlepiej uruchom sobie grę, ustaw parametr na 0, przebiegnij się kawałek, potem ustaw parametr na 1 i przebiegnij się znów, nasłuchując dźwięków kroku.
  • Jump Speed – Kolejny prosty parametr, czyli wysokość i szybkość wybicia w powietrze naszej postaci
  • Stick To Ground Force – Odwrotne do poprzedniego, czyli z jaką szybkością nasza postać będzie opadać.
  • Gravity Multipler – Czyli mnożnik grawitacji. Im większy, tym szybciej nasz przyssie do ziemi.
  • Mouse Look – Czyli sterowanie (obracanie się) za pomocą myszy. Po rozwinięciu ma kilka swoich parametrów:
    • X Sensitivity – Czułość na osi X
    • Y Sensitivity – Czułość na osi Y
    • Clamp Vertival Rotation – Blokada obrotu w pionie. Jeśli wyłączyć ten parametr, to możemy obrócić naszą postać o 360 stopni w dół/górę
    • Minimum X i Maximum X – Dwa parametry, które określają w jakiej granicy ma się odbywać blokada
    • Smooth – Obrót odbywa się z wygładzeniem, czyli takim lekkim opóźnieniem obrotu, względem ruchu myszy.
    • Smooth Time – Oczywiście parametr decydujący ile wygładzanie ma trwać.
  • Use Fov Kick – Zmienia nieco pole widzenia naszej kamery gdy zaczynamy biegać, aby nadać iluzję zwiększenia prędkości.
    • Camera – Kamera, na której ma się to odbyć, wypełnia się automatycznie
    • FOV Increase – Zmiana pola widzenia (Field Of View)
    • Time to Increase – Czas w jakim ma się zwiększyć pole widzenia
    • Time to Decrease – Czas w jakim ma się zmniejszyć pole widzenia
    • Increase Curve – Czyli krzywa, pokazująca jak ma się odbywać zmiana pola widzenia
  • Use Head Bob – Jest to efekt gibania się głowy na boki w trakcie chodzenia
    • Horizontal/Vertical Bob Range – Czyli jak bardzo może się gibać nasza głowa w poziomie i pionie.
    • Bobcurve – Znów krzywa, pokazująca jak wartość ma się zmieniać.
    • Vertical To Horizontal – Szybkość przejścia między gibinięciem pionowym i poziomym. Za duża wartość sprawi, że postać dostanie padaczki.
  • Jumb Bob – Gibnięcie głową w dół i górę gdy postać ląduje po skoku
    • Bob Duration – Czas trwania gibnięcia.
    • Bob Amount – Zasięg gibnięcia.
  • Step Interval – Odległość między odegraniem dwóch dźwięków kroku.
  • Footsteps Sound – Tablica z dźwiękami kroków, które mogą być odtworzone
  • Jump Sound – Dźwięk skoku
  • Land Sound – Dźwięk lądowania

Jak mówiłem, ten skrypt jest bardzo rozbudowany, ale zapewnia nam prawie wszystko, czego moglibyśmy oczekiwać. Do tego nasza postać ma komponent AudioSource, który pozwala słyszeć dźwięki, oraz Rigidbody, czyli fizykę. Jednak przy istnieniu komponentu Character Controller, nie jestem pewny, czemu ten komponent dodano, bo wydaje się zbędny.

No rusz się!

Póki co, nie musimy zmieniać tych parametrów dla naszej postaci i możemy zostawić je na ustawieniach domyślnych. Są wystarczające dla naszych potrzeb. Teraz, aby przetestować działanie kontrolera, uruchom grę za pomocą przycisku play i pochodź sobie po świecie. Jak się pewnie domyślasz posłuży Ci do tego kombinacja WSAD lub strzałki i spacja do skoku.

Jest to dobry moment, żeby przetestować różne ustawienia wyżej omawianych parametrów i zobaczenia jak wpływają na grę w praktyce.

Poprzednia część <- #1 – Tworzymy teren

Następna część -> #3  – Życie, pancerz i wytrzymałość postaci

Podoba Ci się? Udostępnij!