Mechanika w grze planszowej

Ogólne pytania na temat Unity3D

Mechanika w grze planszowej

Postprzez Kędzior » 06 Sty 2017, 17:14

Witam. Szukam porady do problemu. Tworzę grę planszową w stylu monopoly i mam problem z mechaniką. Wstępnym założeniem jest stworzenie obiektu dla każdego pola na planszy i nadanie mu atrybutów tj
-kolejność na planszy (do obliczeń związanych z ilością pól do przebycia odebranych z kostki),
-danych na temat pola - cena itp.
Poruszanie postaci po planszy oparte ma być na vectorach i navmesh (jako cel pozycja pola wyliczona na podstawie kolejności na planszy + ilość oczek na kostce).
Chciałbym się dowiedzieć czy w dobrą stronę idę? Wszelka pomoc, porady oraz pogardy mile widziane. Pozdrawiam
Kędzior
 
Posty: 7
Rejestracja: 17 Gru 2016, 13:41
Has thanked: 0 time
Been thanked: 0 time

Re: Mechanika w grze planszowej

Postprzez Marcin » 06 Sty 2017, 19:08

Obiekt dla każdego pola na planszy to nawet dobry pomysł. Przemyśl tylko, jakie informacje chcesz w nim przechowywać. Przydatna byłaby globalna pozycja danego elementu, żeby można było w jakiś sposób pozycjonować pionki czy cokolwiek innego. Kolejność na planszy i cena też by mogła być teoretycznie w nim zapisana. Pamiętaj tylko, aby nie wpakować za dużo funkcjonalności w tę klasę. W zasadzie to powinna ona przechowywać głównie dane - pozycję globalną, pozycję na planszy, cenę czy ewentualnie postawione budynki graczy. Czy potrzebujesz navmeshy do takiego problemu? W zasadzie to powinny wystarczyć same pozycje globalne pól na planszy. Navmeshe stosuje się raczej do przestrzeni, gdzie występują jakieś przeszkody czy miejsca niedostępne. Dodatkowo jest to przydatne przy dynamicznym wyznaczaniu najkrótszej ścieżki do danej pozycji i to głównie dla AI. Możliwe, że specyfika Twojego projektu wymaga takie mechanizmy.
O czym będziesz musiał pomyśleć? Na pewno o jakiejś klasie reprezentującej pionki oraz o klasie obsługującej samą rozgrywkę na planszy. Tutaj też musisz uważać, żeby nie wyszedł Ci jakiś potwór długi na setki czy tysiące linii kodu. Najlepiej rozbij klasy na pewne warstwy abstrakcji. W klasie kontrolującej rozgrywkę postaraj się zawrzeć głównie logikę samej gry - dozwolone ruchy, ich kolejność, przekazywanie sterowania do różnych podsystemów czy początek/koniec gry. Samo poruszanie pionkami możesz wydzielić do osobnej klasy/interfejsu, przez co w przyszłości możesz mieć łatwiej ze zmianą ich mechaniki. Kostka do gry - również zależy, jak to chcesz zrealizować. Czy to ma być wypasiona gra z animacjami czy proste 2D bez większych bajerów. Jeżeli dobrze oddzielisz logikę klasy od jej reprezentacji, to nie powinieneś mieć problemów z ewentualnymi zmianami. Gorzej, jak wpakujesz za dużo funkcjonalności w jedną klasę i pomieszasz logikę działania z logiką renderowania/wyświetlania czegokolwiek innego. W sumie możesz zrobić sporo podsystemów - kontrolowanie kostki, sterowanie pionkami, rozstrzyganie eventów przy wejściu na pole itd.
Marcin
 
Posty: 218
Rejestracja: 25 Lip 2016, 10:44
Has thanked: 0 time
Been thanked: 0 time

Re: Mechanika w grze planszowej

Postprzez Kędzior » 16 Sty 2017, 19:26

No i wyszła wada tego pomysłu. Podstawowe poruszanie polegać będzie na kolejności na planszy czyli aktualna pozycja na planszy + ilość oczek. Problem jest z wyszukaniem obiektu o danym parametrze. Nie mogę znaleźć czegoś takiego jak lista obiektów i wyszukanie obiektu po parametrze jakim jest kolejność na planszy. Jednak łatwiejsze by było stworzenie jakiegoś fps przy takiej ilości poradników i pomocy w sieci niż gry planszowej. Czas chyba zmienić temat pracy...
Kędzior
 
Posty: 7
Rejestracja: 17 Gru 2016, 13:41
Has thanked: 0 time
Been thanked: 0 time

Re: Mechanika w grze planszowej

Postprzez Marcin » 16 Sty 2017, 19:44

Dlaczego masz problem z czymś takim? Przecież możesz mieć gdzieś zapisaną listę kolejnych pól (kontroler planszy). W inspektorze przeciągasz obiekty w kolejne pola listy tworząc kolejność. W przypadku tej gry będzie zapętlenie tj. po ostatnim elemencie listy następuje pierwszy, ale to chyba oczywiste. Innym sposobem jest nadanie jakiegoś indeksu dla każdego pola, w czasie uruchomienia gry pobranie listy pól (są dziećmi kontrolera planszy, więc zwykłe GetComponentInChildren) i posortowanie ich rosnąco. Problem z drugim rozwiązaniem jest taki, że można łatwo się pomylić, bez jakiegoś narzędzia do wizualizacji (np. wyświetlanie indeksów nad polami).
Marcin
 
Posty: 218
Rejestracja: 25 Lip 2016, 10:44
Has thanked: 0 time
Been thanked: 0 time

Re: Mechanika w grze planszowej

Postprzez Kaze47 » 23 Sty 2017, 15:59

Całą bazę gry możesz umieścić w dwóch tablicach z danymi
1 - tablica z informacjami o polach na planszy (warto znać też struktury aby zawrzeć więcej informacji pod jednym polem, indexem tablicy), cena, pozycja, właściciel itd.
-funkcją wtedy np. wyświetlisz wszystkie pola z ich pozycją
-index tablicy będzie odpowiadał pozycji gracza
2 - tablica z informacjami o graczach i ich pozycjach, stanie gotówki itp.
-samo poruszanie możesz zrealizować funkcją bodajże lerp odczytując kolejne informacje położenia z tablicy planszy i w ten sposób będziesz mógł przesuwać postać

pola jako obiekty to oprócz wizualnego aspektu przy nich nie zawierał bym żadnych skryptów
powinien wystarczyć za to obiekt z głównymi skryptami, tak jak pisał Marcin z kontrolerem całej logiki gry
Kaze47
 
Posty: 18
Rejestracja: 23 Sty 2017, 14:40
Has thanked: 0 time
Been thanked: 0 time

Re: Mechanika w grze planszowej

Postprzez Kędzior » 19 Mar 2017, 15:58

Witam po przerwie. W tej chwili projekt rozrósł się i rzeczy takie jak poruszanie i się, dodawanie pieniędzy jak i kupowanie pół/ pola specjalne jest zrobione. Dręczy mnie tylko problem jak zrobić tury. Pierwszy pomysł wpadł na stworzeniu flagi IsActive i przełączanie po każdej akcji gracza. Lecz niestety odpadł z powodu dublowania metod dla każdego gracza. Chciałem też aby była możliwość wyboru więcej niż 2 graczy. Czy jest możliwość wyboru aktywnego obiektu?

Drugim problemem jest stworzenie w grze logów. Chciałbym zrobić okienko gdzie będą wyświetlać się 4 ostatnie zdarzenia w grze. Zapewne będę musiał użyć do tego canvasa?
Kędzior
 
Posty: 7
Rejestracja: 17 Gru 2016, 13:41
Has thanked: 0 time
Been thanked: 0 time

Re: Mechanika w grze planszowej

Postprzez dawid621 » 19 Mar 2017, 20:21

Najlepiej zrobic jakiegos GameControllera (chociaz na pewno masz juz taki byt w swoim projekcie) i tam zrobic cos na zasadzie maszyny stanow, ktora bedzie sie odpowiednio przelaczac, dajac kontrole raz jednemu, raz drugiemu graczowi.
dawid621
 
Posty: 91
Rejestracja: 07 Sie 2016, 18:52
Has thanked: 0 time
Been thanked: 0 time

Re: Mechanika w grze planszowej

Postprzez Kędzior » 05 Kwi 2017, 18:50

No i właśnie zrobiłem największy błąd na jaki mogłem sobie pozwolić. Zacząłem pisać wszystko z myślą pod jednego gracza z nadzieją, że później przerobię to łagodnie na 2 graczy. Wszystko piszę w kontrolerze planszy ponieważ tylko w nim mam listę wszystkich pól. Mam 2 obiekty typu gracz i teraz kompletnie nie wiem jak to połączyć aby nie wrzucać w każdą rzecz ifa sprawdzającego który gracz jest aktywny,,,
Kędzior
 
Posty: 7
Rejestracja: 17 Gru 2016, 13:41
Has thanked: 0 time
Been thanked: 0 time

Re: Mechanika w grze planszowej

Postprzez dawid621 » 05 Kwi 2017, 19:58

Zrob tak ze aktywny gracz moze byc tylko jeden i klase obslugujaca dzialania ai, ktora sprawdza pole z aktywnym graczem i jezeli CPU to aktywny gracz to wtedy podejmij dzialanie. To taki najprostszy chyba mozliwy sposob.
dawid621
 
Posty: 91
Rejestracja: 07 Sie 2016, 18:52
Has thanked: 0 time
Been thanked: 0 time

Re: Mechanika w grze planszowej

Postprzez Kędzior » 15 Kwi 2017, 17:32

I takie odpowiedzi są najlepsze :) Nie podanie gotowca tylko kierowanie za rączkę. Udało mi się to ogarnąć. Tylko problem wyszedł tak jak mówiłem z mojej głupoty. Stworzyłem drugi obiekt i po podpięciu skryptu "uciekło" mi połączenie skryptu z obiektem. Wcześniej gra sama wiedziała, że stworzony w innym skrypcie zasad obiekt typu gracz to dokładnie ten walec na planszy a po stworzeniu drugiego obiektu wszystko poszło... No i tu wychodzi moje niedouczenie z unity. Nie mogę wyciągnąć danych z obiektu w grze do skryptu zasad gry.
Kędzior
 
Posty: 7
Rejestracja: 17 Gru 2016, 13:41
Has thanked: 0 time
Been thanked: 0 time

Następna

Wróć do Wsparcie Unity

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 2 gości