Autor Wątek: Gra 2d izometryczna  (Przeczytany 3727 razy)

Offline andy939

  • Użytkownik

# Marzec 20, 2015, 00:09:15
Witam
Mam taki problem chciałbym zrobić z wykorzystaniem unity albo  unreal engine, coś na wzór starych gier rpg, np. baldurs gate. I problem pojawił mi się taki, że żywcem nie wiem jak się za to zabrać. Jeśli chodzi o gry 3d to radze se całkiem dobrze, to tu nie wiem jak zacząć.
A główne problemy których nie moge rozwiązać, to:
1. Jak narysuje sę budynek, i wczytam go np. w unity jako sprite, to chciałbym aby postać obchodziła go dookoła tak jak bym tam boxa postawił, a nie płaski element.
2. Jak odwzorować piętra, czyli mamy np. most w kanionie, postać będzie raz na moście a raz pod mostem

Proszę o jakieś rady

Offline Mr. Spam

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

Offline Gimer

  • Użytkownik
    • Portfolio

# Marzec 20, 2015, 09:33:17
Do 2D mozesz wstawic obiekty  3D ale jak Ty chceez obejść obiekt dookoła w grze 2D tego nie wiem.

Online koirat

  • Użytkownik

# Marzec 20, 2015, 10:01:58
2. Jak odwzorować piętra, czyli mamy np. most w kanionie, postać będzie raz na moście a raz pod mostem
A było tak w baldurze że postać mogła przejść pod mostem a później być na nim ?

Offline beermaster

  • Użytkownik

# Marzec 20, 2015, 11:03:47
Raczej nie. A każde piętro domu to osobna mapka.

Offline mawpa

  • Użytkownik

# Marzec 20, 2015, 11:46:48
Co do pytania o obchodzenie dookoła, to rozumiem, że chodzi o coś takiego, gdzie mamy możliwość podejścia w dolny róg pomieszczenia? Najprostsze, co przychodzi mi do głowy, to mapa podzielona na warstwy.

Na pierwszej warstwie mamy siatkę kolizji - "podłogę", po której się poruszamy i "ściany" do których można podejść (0 to podłoga, 1 to ściana):
Cytuj
0000000000
0011111000
0010001000
0010001000
0011011000
0000000000
Nasza postać porusza się po drugiej warstwie i sprawdza kolizje z pierwszą. Na tej warstwie mogą być też np. NPC i wszystko, z czym wchodzimy w interakcje. Na trzeciej mamy obiekty 3D, które ustawiamy tak, żeby pokrywały się ze ścianami, a przy rysowaniu sprawdzamy, czy obiekt zakrywa postać - jeśli tak, to staje się półprzezroczysty.

Oczywiście warstw może być więcej, mogą być bardziej skomplikowane (np. warstwa z kolizjami sama może być podzielona na warstwy, dzięki czemu będzie można odwzorować piętra) i można je wszystkie zintegrować z obiektami (sic), ale to już kwestia designu.
« Ostatnia zmiana: Marzec 20, 2015, 11:48:35 wysłana przez mawpa »

Offline deadeye

  • Użytkownik

# Marzec 20, 2015, 12:53:00
używasz fizyki 2d w unity - tylko że nie traktujesz jej jako XY, tylko XZ (tak jak patrząc z góry). Twoja postać to Circle Collider 2D z rigidbody2d, ściany to BoxCollider2d itd. Każde piętro to osobna warstwa (możesz je ponazywać jak chcesz), np floor1, floor2. 
Ustawiasz grawitacje na 0 (fizyka 2d u ciebie nie działa w osi, w której działa grawitacja).
Na początku ustawiasz, że twoja postać wchodziła w kolizję tylko z warstwą floor1 w macierzy kolizji http://docs.unity3d.com/Manual/LayerBasedCollision.html (tylko upewnij się że zmieniasz macierz kolizji do fizyki 2d, bo jest osobna niż do 3d)

Później, gdy postać wejdzie na schody które zmieniają na którym jest miejscu, po prostu zmieniasz macierz kolizji w locie aby teraz wchodziła w kolizje z floor2 a z floor1 już nie.

Co do znajdowania trasy wokół, to niestety z tego co wiem pathfinding w unity nie działa w 2d, więc albo poszukasz czegoś na asset storze, albo napiszesz samemu. Albo możesz zastosować wszystkie powyższe rady, używająć fizyki3d zamiast 2d (czyli każdy sprite jest 2d, ale ma niewidzialny boxcollider3d z wysokością np ustawioną zawsze na 1), i wtedy możesz wygenerować navmesh i używać automatycznego pathfindingu, nawet jeśli gra jest w 2d :) To rozwiąże twój problem z omijaniem przeszkód, i choć wydaje się overkillem, to chyba jest najlepszym narzędziem z tych wbudowanych w unity. Plus debugowanie jest o wiele łatwiejsze, jeśli collidery sa w 3d, nawet jeśli gra jest płaska.
« Ostatnia zmiana: Marzec 20, 2015, 12:54:44 wysłana przez deadeye »

Offline andy939

  • Użytkownik

# Marzec 20, 2015, 21:41:13
Nie pamiętam jak to było w baldurs gate, ale w paru innych izometrycznych chyba było, zresztą dawno w to grałem, z obchodzeniem budynku to może sprecyzuje, mam jakis budynek jak w sim city widoczny, i chce żeby postać jak stanie zanim to stała za jego ścianą tylnią i była niewidoczna, a nie zderzała się z jego dachem.
nie wiem czy dobrze się wyraziłem.

I przyszedł mi do głowy jeszcze taki pomysł. bo w 3d myślę że dałbym rade coś takie, to pomyślałem se że na własnie silniku 3d z samych boxów lub box koliderów zbuduje se mape, po której będę się poruszał i przygotuje se sprity które stworzą to co gracz będzie widział. Dało by rade takie coś zrobić??

Offline Astisus

  • Użytkownik
    • Portfolio

# Marzec 20, 2015, 22:16:07
Jeśli chodzi o kolizje budynek-postać to temat ten był poruszany tutaj. Może znajdziesz tam coś przydatnego.

Offline andy939

  • Użytkownik

# Marzec 23, 2015, 09:14:53
poczytałem se jeszcze trochę i mam już pewną wizje jak to może być zrobione, kolizje z budynkami i te piętra porobić warstwami, lub na silniku 3d też idzie coś wymyślić.
Jeszcze tylko jedna kwestia albo dwie.
Jeśli chodzi o poruszanie się żeby było bardziej naturalne, czyli postać idzie tam gdzie klikne, ponieważ isometric 2d opiera sie na siatce więc chodzi po polach na siatce, to żeby poszła idealnie w miejsce które kline to przychodzi mi do głowy zrobić gęstą siatkę, im mniejsze pola tym bliżej kursora postać podejdzie.

oraz wzgórza na ziemi, żeby nie było to takie płaskie, to wyobrażam se tu jedynie 3d, albo zmyślny rysunek, i np. jak ktoś na to nadejdzie to zmniejszę prędkość ruchu, wciąż nie mogę sobie wyobrazić jak zrobić złudzenie żeby postać szła do góry, bez używania trzeciego wymiaru czyli jak hodzimy po x iz to idąc pod góre, schodach powinienem zwiększać połązenie na osi y

Offline andy939

  • Użytkownik

# Marzec 26, 2015, 19:40:37
podbijam, jak to jest z tym chodzeniem po schodach pod góre

Offline Kyroaku

  • Użytkownik

# Marzec 26, 2015, 23:21:08
Cytuj
Jeśli chodzi o poruszanie się żeby było bardziej naturalne, czyli postać idzie tam gdzie klikne, ponieważ isometric 2d opiera sie na siatce więc chodzi po polach na siatce, to żeby poszła idealnie w miejsce które kline to przychodzi mi do głowy zrobić gęstą siatkę, im mniejsze pola tym bliżej kursora postać podejdzie.
To, że kafelki masz rozmieszczone co ileś tam pixeli nie znaczy, że postać może stać jedynie na środku kafelka. Jestes programistą - możesz postawić postać gdzie chcesz.

http://img.ehowcdn.com/615x200/ehow/images/a04/9a/l1/make-own-2d-game-800x800.jpg
Patrząc na obrazek sam powinieneś dojść do tego, jak można zrobić kolizje z takim "czymś".
Jeśli dobrze pomyślisz, to nie trzeba nawet robić "warstw" terenu.

Cytuj
jak hodzimy po x iz to idąc pod góre, schodach powinienem zwiększać połązenie na osi y
Nie powinieneś, ponieważ w 2D masz tylko 2 wymiary :P

Offline andy939

  • Użytkownik

# Marzec 27, 2015, 08:18:00
Nie jestem jeszcze aż tak dobrym programistą.
To że mogę postawić postać niezależnie od kafelka jak buduje na gridzie to mnie zaskoczyłeś.
Do tej pory robiłem tak że mapa to tablica tab[M][N] gdzie jedno pole to jeden kafelek, i najprościej tam gdzie o to nie moge iść kolizja jeden moge isc. Po co grid skore moge chodzić niezależnie od niego

Patrząc na ten screen zrobienie schodów na tą góre to mam pewne wyobrażenie jak to zrobić, problem w tym że ja chce kamere umieścic pod kątem, tak że nie widze kwadratów tylko romby


chodzi mi o coś takiego, będzie można raz pójść do góry na wyże piętro a raz być niżej np pod tym postem.
a jestem w stanie se takie coś narysować,
« Ostatnia zmiana: Marzec 27, 2015, 08:45:12 wysłana przez andy939 »