Autor Wątek: Sterowanie postacią  (Przeczytany 704 razy)

Offline Karol

  • Użytkownik

# Lipiec 31, 2017, 16:37:47
Próbuję zrobić sterowanie postacią FPP w najprostszym chyba możliwym sposobie, czyli tak jak w Quake i dziesiątkach innych gier i jakoś nie mogę, albo nie ogarniam.

W dokumentacji Unity podają, żeby do takiego sterowania używać CharacterController, a nie Rigidbody. Sprawdziłem przykład CharacterController i to jest mega tragiczne, postać przykleja się do sufitu podczas skoku, przykleja się do krawędzi, klinuje się na kancie schodów, nie mówiąc o tym, że nie można się zbyt precyzyjnie poruszać, bo trzeba robić całe kroki. Co więcej jest tam komponent rigidbody i nie wiem co mam o tym myśleć :U

Może mi ktoś jak krowie na miedzy powiedzieć jak to zmontować? Typu zrób cube, wsadź mu w gębę kamerę i podepnij skrypt z tym i tamtym, albo coś takiego?

Co chcę osiągnąć? Sterowanie jak w Quake, Doom, Borderlands, Fallout (mowa o >= 3), gdzie jak wcisnę W na ułamek sekundy to postać poruszy się ułamek do przodu, bez żadnego zachowania momentu pędu i innych wynalazków. W/S to przód/tył, A/D to strafe, spacja skok i myszka do rozglądania się i wyznaczania wektora poruszania się w osi przód/tył :P.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Jakub27

  • Użytkownik

# Lipiec 31, 2017, 17:05:00
Możesz użyć gotowanego Third Person Character Controller lub First Person Character Controller, które znajdują się w darmowym assecie

Offline Karol

  • Użytkownik

# Lipiec 31, 2017, 17:12:48
Możesz użyć gotowanego Third Person Character Controller lub First Person Character Controller, które znajdują się w darmowym assecie
Ten First Person Character Controller to kupa totalna (j/w pisałem to dokładnie to miałem na myśli), z miejsca bym wywalił grę z takim sterowaniem.

Offline Jakub27

  • Użytkownik

# Lipiec 31, 2017, 17:20:27
Może ustawieniami się pobaw. Ewentualnie poszukaj czegoś na asset store. Ostateczne rozwiązanie to napisanie własnego sterowania

Offline Karol

  • Użytkownik

# Lipiec 31, 2017, 17:30:51
Sprawdzałem kilka, w tym jedno z reklamowanych "essentials", gdzie sterowanie ma masę bugów (np. puści się sprint skacząc to nagle postać zwalnia w powietrzu).

Już wyjaśniam też o co mi chodzi z tym sterowaniem jak kupa w FirstPersonCharacter/FPSController z pakietu Characters -> referencja https://www.youtube.com/watch?v=paXeTJNmJ2U

00:03 - moce spidermana, przyklejam się do sufitu
00:09 - brak możliwości poruszania się "po pikselku", musi być ten durny krok
00:15 - spiderman ponownie
00:22 - może to nie wygląda, ale cały czas trzymam do przodu, a postać ani drgnie, powinna się ślizgnąć po ścianie do momentu aż będzie w stanie wejść na platformę
00:40 - widać problemu z ślizganiem się po ścianie nie ma, ale jak się tylko wejdzie ciut wyżej to głupieje
00:51 - ustawiłem się pod kątem do krawędzi i powinienem z niej spaść, jednak tak się nie stało do momentu aż nie doszedłem do końca

Z chęcią bym coś napisał własnego, tylko potrzebuję naprowadzenia, bo same sprzeczne informacje znajduję :/ a nie chce mi się wierzyć, żeby coś tak prostego było jakimś tematem tabu.

O przykładzie z FirstPersonCharacter/RigidBodyFPSController nawet nie wspomnę, bo tam mam wrażenie jakbym grał w Subnauticę, a nie grał w FPP (postać dosłownie pływa).
« Ostatnia zmiana: Lipiec 31, 2017, 17:34:22 wysłana przez Karol »

Offline Jakub27

  • Użytkownik

# Lipiec 31, 2017, 17:41:14
Zależy jak bardzo realistycznego modelu potrzebujesz. Gdybyś chciał zrobić coś bardziej zaawansowanego to nie będzie to takie proste. Np. trzeba ogarnąć ik system i te sprawy. Ogólne programowanie fizyki i tym podobe to czasami karkołomne zadanie

Offline Karol

  • Użytkownik

# Lipiec 31, 2017, 17:54:32
Zależy jak bardzo realistycznego modelu potrzebujesz.

Takiego, najprostszy chyba możliwy:

Co chcę osiągnąć? Sterowanie jak w Quake, Doom, Borderlands, Fallout (mowa o >= 3), gdzie jak wcisnę W na ułamek sekundy to postać poruszy się ułamek do przodu, bez żadnego zachowania momentu pędu i innych wynalazków. W/S to przód/tył, A/D to strafe, spacja skok i myszka do rozglądania się i wyznaczania wektora poruszania się w osi przód/tył :P.

Offline matheavyk

  • Użytkownik
    • rabagames.com

  • +1
# Lipiec 31, 2017, 19:08:47
Moim zdaniem wszystko zależy od tego, co chcesz tak naprawdę zrobić.

Jeśli chcesz sam zaprogramować grę z poruszaniem postaci, to na necie jest pełno opisów, jak to zrobić. I czy to jest Unity czy nie, to nie ma znaczenia.

Jeśli chcesz mieć gotowe rozwiązanie, to proponuję:

a) [PŁATNY] uFPS - sterowanie first person, bardzo rozbudowane narzędzie, dużo rzeczy, których pewnie nie potrzebujesz.
https://www.assetstore.unity3d.com/en/#!/content/2943

b) [PŁATNY] Third Person Controller - sterowanie w trzeciej osobie, bardzo rozbudowane, kolega z pracy na tym robił jakieś demko i poruszanie na pewno działa tak jak chcesz (tylko, że w trzeciej osobie). Też dużo rzeczy, których nie potrzebujesz tutaj będzie.
https://www.assetstore.unity3d.com/en/#!/content/27438

c) [DARMOWY] Third Person Controller - Basic Locomotion - nie używałem, też trzecia osoba. Wygląda spoko.



Co do instrukcji co do czego przyczepić, żeby wszystko było cacy. Wiem, że to Cię nie zadowoli, ale w manualu Unity jest napisane czym jest Character Controller i dlaczego zrobiony jest tak, a nie inaczej (https://docs.unity3d.com/Manual/class-CharacterController.html). Możesz go sobie wziąć i przerabiać na własne potrzeby, po tym jak zrozumiesz jego działanie. A jak zrozumiesz, ale nie będzie Ci się podobał, to będziesz wiedział, jak zrobić swoje własne rozwiązanie.

A jeszcze prostsza instrukcja, która byłaby jeszcze prostszą odpowiedzią na Twoje pytanie:
weź capsule collider, ustaw na jego czubku kamerę, napisz skrypt, który po naciśnięciu przycisku na klawiaturze dodaje ustaloną przez Ciebie wartość (szybkość) do osi x, y lub z obiektu w zależności od naciśniętego przycisku. Po naciśnięciu skoku wartość y musi się dodawać przez jakiś czas. A tak ogólnie, to jeszcze grawitacja musi się co klatkę dodawać do y. Tak to się kiedyś robiło i teraz również będzie to działać. Są plusy i minusy tego rozwiązania. Dlatego możesz je sam pisać albo możesz użyć jakiegoś gotowego rozwiązania, które trzeba zmodyfikować na własne potrzeby.

Z szybkiego googlowania znalazłem takie rzeczy, ale musisz sam sprawdzić, czy działają i czy to nie są jakieś stare rozwiązania, które w nowym Unity nie ruszą:
http://torahhorse.com/first-person-drifter-controller-for-unity3d
http://answers.unity3d.com/questions/976712/quake-movement-in-unity.html

Innymi słowy: chcesz szukać - szukaj i modyfikuj wg własnych potrzeb, chcesz sam pisać - pisz. Nikt tu raczej nic mądrzejszego nie odpowie ;)

Offline Brajanowski

  • Użytkownik

# Lipiec 31, 2017, 23:24:46
Kiedyś bawiłem się tym i napisałem taki prosty fps controller, wzorowałem się na chyba standardowym assecie od unity i jest to zrobione przy pomocy character controller.

Może się przyda:
https://github.com/Brajanowski/PolyShooter/blob/master/Assets/Scripts/Gameplay/FPSController.cs

Offline shoter

  • Użytkownik

# Sierpień 01, 2017, 01:03:16
Link do tutoriala, który wyjaśnia jak zrobić TPP controllera. Mam zapisane w linkach jak mnie najdą dni na powrót do Unity :

http://www.3dbuzz.com/forum/threads/186955