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

  • Michał

    Mógłbyś zrobić poradnik jak zrobić sterowanie do platformy android. Dodanie i ustawienie sterowania tymi wirtualnymi joystickami na ekranie, bo nie ogarniam tego, a byłoby bardzo pomocne. Byłbym wdzięczny ;). Pozdrawiam.

  • Michał Rewers

    nie mogę wgrać mouse look. pisze cant add script begaviour MouseLook. The script need to derive from monobehavior !

    • Przy dodawaniu kompletnego obiektu, problem nie powinien występować, bo wszystkie komponenty (w tym skrypty) powinny być już dodane. Jeśli dodajesz jakiś zewnętrzny skrypt MouseLook, to musiałbym go zobaczyć, żeby coś doradzić.

  • Alex Plutowski

    zawsze kiedy chce przetestować jak to wygląda w praktyce to sie spawnuje gdzieś poza mapą. jak to ustawić żeby sie spawnować w danym miejscu?

    • Po uruchomieniu gry, kamera znajduje się tam gdzie postać gracza, którą ustawiłeś. Musisz ją przenieść na wybrane miejsce.

      Druga opcja jest taka, że zostawiłeś na scenie domyślną kamerę (obiekt Main Camera) i zamiast widzieć z perspektywy postaci, widzisz z perspektywy tej kamery.

  • KataraDark

    Pomocy mam takie błędy i nie wiem co one oznaczają:

    „Timed out connecting pipe to external process: C:/Program Files/Unity/Editor/Data/Tools/JobProcess.exe

    Potem jest:

    „Failed executing external process for „Clustering” job.”

    Potem mam:

    „Failed executing external process for „Visibility” process.”

    • A w jakim momencie pojawiają Ci się te błędy?

    • KataraDark

      Regularnie co kilka minut.

    • Jeżeli przeinstalowanie Unity, zainstalowanie starszej wersji czy aktualizacja sterowników (względnie powrócenie do starszej wersji) nie pomaga, mogę jedynie zalecić konsultację z Supportem Unity.

  • Michał Elcz

    Proszę o pomoc, gdy chce uruchomić grę, pojawiam sie w powietrzu, nie mogę sie ruszać i pojawia sie komunikat ,,NullReferenceException: Object reference not set to an instance of an object
    UnityStandardAssets.Characters.FirstPerson.FirstPersonController.RotateView () (at Assets/Standard Assets/Characters/FirstPersonCharacter/Scripts/FirstPersonController.cs:237)”.

    • FirstPersonController jest skryptem domyślnym postaci. Jeśli w nim nie grzebałeś nie ma możliwości, żeby pojawił się błąd tego typu. Chyba, że w Unity v5 korzystasz z assetów dla Unity v4 albo odwrotnie.

  • Kacpeer

    Mam problem kiedy chcę postawić FirstPersonController po prostu nie mogę tego postawić

  • Kamil Szamałek

    Mam problem, bo chodzić chodzi ale nie skacze, dlaczego??

    • A wykorzystałeś model ze standardowych assetów czy jakiś inny?

    • Kamil Szamałek

      No właśnie tak i dlatego się dziwię

  • @kuba_root

    ja korzystam z unity 5.0 i po dodaniu obiektu i odpalenia gry lecę do góry dlaczego?

    • Nie wiem co dokładnie wypisujesz w konsoli, ale zakładam, że to parametr grawitacji, który u Ciebie ustawiony jest na wartość ujemną. Przez co góra jest na dole, a dół u góry.
      W Edit -> Project Settings -> Physics możesz sobie zmienić ten parametr.
      Ewentualnie jeśli gdzieś w kodzie zmieniałeś kierunek grwitacji, np. tak:
      Physics.gravity = new Vector3(0, -1.0F, 0);
      To ten fragment jest temu winny.

  • @kuba_root

    to zdjęcie

  • @kuba_root

    hmmm a jaka powinna być ta wartość

  • @kuba_root

    bo tak była ujemna na -9.80 usunołem minus i ciągle nie działa

  • @kuba_root

    a powinienem dodać FPSConroller tak?

  • @kuba_root

    dodałem ten obiekt i ciągle lęcę w górę

    • Jedna sprawa, to mój błąd, grawitacja faktycznie powinna mieć wartość ujemną. Ale ogólnie nie widzę powodów dla których tak by się miało dziać.

      Spróbuj stworzyć nowy projekt i dodać tam tylko teren i FPSController.

  • XPerimental_Rabbit2016

    Co mam zrobić w unity 5.4 jeśli buguje mi się tekstura terenu? Przed nałożeniem jest cały szarogranatowy i nie widać żadnych zmian trzeba go robić na oślep a jak nałożę teksturę trawy to robi się z niego jednolita czarna masa.

    • Możesz wysłać screen Twojego problemu, bo nie umiem sobie tego nawet wyobrazić. :P

  • XPerimental_Rabbit2016

    Mogę przesłać zdjęcie tylko muszę włączyć kompa

  • XPerimental_Rabbit2016

    Koło 16 spróbuję wrzucić screena

  • Usuri

    Witam. Dopiero pierwszy raz zainstalowałem Unity i zaczynam zabawę. Zastanawia mnie tylko dlaczego pewnych opcji wymienionych tutaj, jak kontrolerze postaci nie mam. Jak na przykład:
    Extra Height, Slope Speed Multiplier Curve, Max Ground/Air Acceleration itp.
    Czy w nowej wersji te opcje zostały wycofane?

    Dziękuję

  • Piotrow

    Chciałem zrobić prosty skrypt wyrównujący tor ruchu pojazdu(np jeżeli rotacje pojazdu wynoszą 110, to niech z czasem wyrówna się do 90).
    Tak wygląda przykładowy if
    if(transform.rotation.z % 90 > 45)
    {
    transform.Rotate(0, 0, -0.5f * Time.deltaTime);
    }

    problem pojawił się w tym że transform.rotation.z zwraca wartość od -1 do 1 i nie umiem stwierdzić jakie zasady tym żądzą bo 90’~0.7, 60′ = 0.5, 180′ = 1
    Jak to działa?

    • Nieco dziwny błąd, bo transform.rotation.oś powinno zwrócić wartość która wyświetla Ci się w oknie inspektor w komponencie transform.

    • Piotrow

      Gdzie trzeba szukać błędu?

      Lub jak jeszcze można rozwiązać problem krzywo jeżdżących pojazdów?

    • Mogę podpowiedzieć jakieś rozwiązanie jak podrzucisz screen gry, żebym miał kontekst tego, jak to się powinno odbywać. :)

    • Piotrow

      przypadkiem odkryłem że te losowe liczby to pierwiastki ułamków
      ale wciąż nie umiem znaleźć zasady

      90′ = 0.5 , 60′ = 0.25, 120′ = 0.75

    • Piotrow

      niektóre wrtości zgadzają się z sinusem, niektóre

    • Piotrow

      już mam – to sinus danego kąta dzielony przez 2
      Dobra, teraz jak to mogę wykorzystać, albo jakoś zamienić to na normalne kąty

  • piorotorus

    Witam.
    Mam pytanie, gdzie mogę zmienić ustawienie które odpowiada za to, że jak podczas skoku wcisnę spację to od razu po wylądowaniu następuje następny skok?
    Dziękuję i pozdrawiam.

  • piorotorus

    Witam.
    Chciałbym pozbyć się niechcianego efektu, podczas bycia w powietrzu gdy kliknę spację to po wylądowaniu odbędzie się skok. Chciałbym usunąć takie „kolejkowanie” się skoków.
    Pozdrawiam.

    • Witam,
      wykorzystujesz swój skrypt czy domyślny Controller?

    • piorotorus

      Domyślny Controller, ale trochę go po modyfikowałem:
      if (!m_PreviouslyGrounded && m_CharacterController.isGrounded) {

      StartCoroutine(m_JumpBob.DoBobCycle());
      PlayLandingSound();
      m_MoveDir.y = 0f;
      m_Jumping = false;
      m_Jump = false;
      }

      Tutaj dodałem wpis m_Jump=false: i przestało występować to o czym wspominałem, ale od tego czasami występują problemy z utratą staminy przy skokach który napisałem ale to możliwe że gdzieś indziej jest błąd.