Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Project Spark - kurs tworzenia gier część 3, ścieżki ruchu, praca kamery oraz intro

W tej lekcji nauki programowania gier spróbuję pokazać jak zrobić przerywnik filmowy. W tym celu poznamy mechanizm definiowania ścieżek kontrolujących ruch elementów, interakcji oraz przekazywania energii. Dzięki temu będziemy mogli w naszych grach tworzyć różne ruchome mechanizmy typu platformy, windy oraz ustalać zasady poruszania się dla bohaterów NPC. Nasz świat gry przestanie być nieruchomy. Jeżeli ktoś trafił na ten artykuł nie czytając wcześniejszych części to zachęcam do przeczytania wszystkich po kolei

Zaczynamy od stworzenia pustego projektu. Tym razem by przyspieszyć sobie pracę skorzystamy z jednego z przygotowanych obiektów złożonych czyli tzw. assembly. Wchodzimy do menu selekcji obiektów i wybieramy opcje wyboru z galerii. Na ostatniej zakładce od góry wybieramy sekcję złożonych obiektów i odszukujemy tam interesujący nas element. Lista obiektów jest długa i warto sobie z poszczególnymi elementami poeksperymentować by poznać różnie ciekawe mechanizmy skryptów. Znajdziemy tam także nasze złożone obiekty które będziemy tworzyć na potrzeby pisanych przez nas gier. Wybieramy obiekt 'Elevator' czyli platformę pełniąca rolę windy. Umieszczamy ją w naszym świecie.

To złożenie składa się z trzech platform, dwóch przełączników oraz jednej ścieżki czyli obiektu 'Path'. Będzie ono centralnym elementem naszej lekcji. Na obu platformach górnej i dolnej znajdują się przełączniki. Gdy jeden z nich przełączamy to środkowa platforma windy porusza się w górę lub w dół. Przyjrzyjmy się więc jaki kod zdefiniowano w jednym z przełączników. Jak widać jest tu prosta zasada która w momencie gdy ktoś użyje dźwigni to przełącza stan energetyczny obiektu. Ponieważ obiekt początkowo nie miał energii więc użycie przełącznika dodaje energię. Nie ma tu jednak żadnej informacji o tym co się dzieje dalej.

Zauważamy jednak że gdy wybraliśmy obiekt dźwigni to edytor pokazał nam że obiekt ten ma połączenie z obiektem platformy. To jest tzw. połączenie energetyczne. Mówi nam ono że jeżeli obiekt nadrzędny czyli dźwignia posiada energię to przekazuje go do zdefiniowanych obiektów zależnych. Twórca gry może powiązać dowolne obiekty ze sobą za pomocą takiego powiązania energetycznego co znacznie ułatwia zarządzanie logiką sterowania w grach. Połączenia energetyczne wybieramy z tego samego menu w którym znajduje się selekcja, wielokrotna selekcja, połączenia energetyczne oraz połączenia obiektów ze sobą

Zobaczmy więc co się dzieje z przekazaną energią w obiekcie docelowym czyli platformie 'ElevatorPlatform'. Mamy tu następującą regułę działania. Gdy obiekt zostanie zasilony energią to platforma zaczyna poruszać się po ścieżce 'Elevator path' z prędkością 0.5 z parametrem latanie. Jeżeli popatrzymy na umieszczoną w naszym świecie windę to bez problemu odnajdziemy tam obiekt ścieżki o takiej nazwie który ma zdefiniowany tor ruchu w pionie. Warto przy tej okazji zaznaczyć że każdy taki obiekt ścieżki poza nazwą posiada szereg innych parametrów. Dwa parametry są szczególnie istotne: Mover mode oraz Orientation. Pierwszy to decyzja czy ścieżka ma się wykonywać w pętli czy tylko jednorazowo, drugi to sposób zachowania się obiektów poruszających się na ścieżce. Ten drugi parametr jest bardzo istotny jeżeli po ścieżce będzie poruszał się obiekt bohatera NPC ponieważ zamiast wartości 'fixed' musimy wybrać wartość '3D'. Wartość fixed oznacza że obiekt nie może się obracać i bohater poruszający się bez obracania w kierunku ruchu wyglądałby co najmniej dziwnie. Za to wartość fixed idealnie nadaje się do projektowania w grze różnych mechanizmów.

Druga część reguły jest równie prosta. Jeżeli obiekt poruszający się na ścieżce przekroczy punkt kontrolny czyli w naszym przypadku koniec ścieżki to wyłączamy energię w przełącznikach. Dzięki temu platforma znajduje się w górnej pozycji traci energię i reguła ruchu się kończy. Gracz który aktywuje dźwignię ponownie zasili platformę i przemieści ją do pozycji dolnej. Warto też zauważyć że gracz może przełączyć dźwignię samodzielnie wcześniej w czasie ruchu platformy co ją zatrzyma ponieważ odbierze jej energię zasilającą. Całość jest bardzo prostym przykładem w jaki sposób możemy zarządzać w naszych grach aktywowaniem różnych elementów ruchomych. Oczywiście znacznik energii możemy wykorzystać na setki innych sposobów np. zmieniając aktywną stronę skryptu bohatera NPC by przełączyć go z trybu 'sen' na tryb 'patrolowanie' gdy w pobliżu aktywuje się np. syrena alarmowa itp.

Skoro wiemy już jak dodawać do naszej gry ścieżki ruchu oraz wiemy jak definiować obiektom zasady poruszania się po tych ścieżkach czas zrobić intro. W naszym filmie postać NPC zaczynająca na dolnej platformie pobiegnie do bohatera znajdującego się na górnej platformie. W tym celu będzie musiała ona wbiec na ruchomą platformę, przełączyć dzwignię, zaczekać aż winda wjedzie na górę a następnie podbiec do postaci gracza. W tym czasie gracz będzie miał zablokowane sterowanie poprzez zdefiniowanie zasady 'Disable Brain' na czas trwania naszego intra. Dodatkowo zamiast zwykłej kamery podążającej za graczem będziemy mieli naszą własną kamerę skierowaną na biegnąca postać NPC. Kamera ta będzie poruszała się po zdefiniowanej przez nas spirali. Całość z typowo filmową panoramą.

Pierwszą czynnością jaką robimy to umieszczamy naszego bohatera na górnej platformie oraz postać NPC na dolnej. To będzie nasz punkt odniesienia dla tworzonej animacji. Następnie dodajemy dwa obiekty ścieżki symbolizujące ruch naszej postaci NPC. Pierwsza ścieżka definiuje trasę ruchu wbiegania na platformę windy. Druga ścieżka zaczyna się w miejscu gdzie postać NPC będzie się znajdowała gdy wjedzie windą na górę i kończy się w pobliżu naszego gracza. Całość jest banalnie prosta. Następnie wchodzimy do parametrów każdej ze ścieżki i definiujemy wartość 3D dla parametru 'Orientation' oraz by ruch odbywał bez zapętlenia. Warto także nadać własne nazwy poszczególnym ścieżkom tak by się nam nie myliły. Nazwy nadajemy w trybie edycji właściwości naciskając na kontrolerze przycisk 'Y' co trudno zauważyć na pierwszy rzut oka

Następnie definiujemy zasady sterowania postacią NPC. Ponieważ mózg naszej postaci pracuje na zasadzie systemu reguł stanowych będziemy potrzebowali dwóch osobnych stron. Pierwsza ze stron będzie aktywna w czasie biegu po dolnej platformie a następnie po przełączeniu przełącznika przejdziemy na druga stroną skryptu która będzie się wykonywała w czasie biegu po górnej platformie. Dowolny obiekt w grze może posiadać dowolną ilość stron skryptu sterującego i dowolnie się pomiędzy nimi przełączać. Strony możemy traktować jako trwałe przełączenie strony poleceniem 'Switch Page' lub jako krótkie funkcje które wywołamy poleceniem 'Call Page'. Krótkie wywołanie po jednorazowym wykonaniu wrócą do miejsca wywołania. Warto pamiętać że aktywna reguła wykonuje się w pętli dzięki temu umieszczając polecenie biegania postać wykonuje kolejne kroki ale w dowolnym momencie jakieś inne zdarzenie może przerwać nasz stan biegu. Jest to bardzo przydatne ponieważ możemy zdefiniować przykładowo stan 'patrolowanie' gdzie nasza postać będzie chodziła po wyznaczonej ścieżce ale gdy tylko zauważy wroga to przejdzie do stanu 'atak'. Oczywiście stron skryptu może być znacznie więcej i przykładowo możemy zdefiniować stan 'unik', 'atak specjalny' itd. Można nawet zdefiniować kilka predefiniowanych mózgów i przełączać się pomiędzy nimi na zasadzie stosu co może być przydatne jeżeli mamy np. kilka typów przeciwników którzy współdzielą wspólne ogólne skrypty typu 'atak', 'patrolowanie' itd.

Nasza pierwsza strona nakazuje postaci NPC poruszać się po ścieżce Path1. Jednocześnie jej druga część definiuje warunek który uruchamia się w momencie przekroczenia punktu końcowego ścieżki. Gdy postać NPC dojdzie do końca ścieżki to aktywuje ona obiekt przełącznika obok którego stoi. Reguła ta ma znacznik pojedynczego wykonania która została mi z testów by postać nie przełączała dźwigni z każdą klatką animacji. Oczywiście druga linia tej reguły przełączy strony więc warunek nie mógłby się wykonywać w pętli bo sterowanie będzie po jednokrotnym wykonaniu na drugiej stronie skryptu

Druga strona jest jeszcze prostsza. Nasza postać NPC najpierw czeka 2 sekundy a następnie zaczyna się poruszać po drugiej ścieżce. To początkowe czekanie to czas który potrzebuje winda na przewiezienie postaci na górną platformę. Oczywiście można byłoby to napisać lepiej i sprawdzać stan czy winda dojechała na właściwą pozycję ale byłoby to niepotrzebne komplikowanie naszego kursu.

Nasze intro powinno już działać. Po uruchomieniu gry postać NPC przybiegnie do naszego bohatera wjeżdżając pod drodze windą. Jednak my niewiele z tego zobaczymy ponieważ domyślna kamera będzie skierowana na plecy naszego bohatera. Musimy więc dodać druga kamerę na potrzeby naszego intra która będzie poruszała się po wyznaczonej przez nas trasie tak by pokazywać biegnącą postać NPC. W tym celu dodajemy kolejna ścieżkę którą nazwiemy 'Camera Path'. Jest ona złożona z wielu segmentów i ma kształt spirali kręcącej się na około naszej platformy jednocześnie unosząc się w górę tak by pokazać ruch windy. Ścieżka ma ustawiony parametr 'smooth' by ruch kamery był płynny.

Następnie musimy dodać kamerę. W Project Spark kamera jest regułą którą możemy dodać do dowolnego obiektu więc nie ma znaczenia jaki obiekt będzie się poruszał po ścieżce. Jednak by całość wyglądała ładnie w czasie edycji to wybieramy obiekt 'Camera Gizmo'. Następnie definiujemy mu reguły sterowania. Na początku aktywujemy panoramę, następnie ustawiamy kamerę z pierwszej osoby jak do gry FPS i kierujemy ją na naszą postać NPC. Następnie definiujemy regułą poruszania się po zdefiniowanej wcześniej ścieżce. Gdy tylko ta reguła będzie aktywna to kamera będzie się poruszała. W naszym przypadku będzie to od razu po rozpoczęciu działania gry tak by uprościć kurs. W realnych sytuacjach oczywiście trzeba dodać jakiś warunek np. 'gdy bohater zbliży się w jakieś miejsce' to obiekt kamery może dostać energię by rozpocząć działanie jak w przypadku wcześniej opisywanej platformy.

I gotowe. Nagrany film trochę przerywa ale to kwestia oprogramowania którego używam do nagrywania pulpitu. Muszę znaleźć jakieś lepsze oprogramowanie bez limitu na 30 sekund i z płynniejszym nagrywaniem. A jak ktoś chce zobaczyć bardziej złożony projekt w którym zarówno postać jak i kamera porusza się po zdefiniowanej ścieżce to dobrym przykładem będzie gra stworzona przez Linkin Park - Guilty All The Same

Oczywiście możemy intro dalej komplikować np. poprzez zdefiniowanie efektu 'depth of field' dla naszej kamery tak by w różnych momentach działania pokazywała odpowiednie plany. Możemy także kierować ją nie tylko na całą postać ale na jej fragmenty tak by śledziła ruch dłoni postaci lub zrobiła zbliżenie na twarz. Jest kilka rodzajów kamer, różne efekty, możliwość kontrolowania focusu, pozycji, głębokości, rozmycia, filtrów... Możliwości się nieograniczone. W jednym z następnych wpisów wrócę do tematu kamery np. przy próbie napisana gry platformowej 2D gdzie ustawienie głębokości obrazu będzie kluczowa. na koniec dorzucam też link do wideo o obsłudze ścieżek zrobione przez jednego z użytkowników Project Spark, warto jego tutoriale subskrybować bo są ciekawe.

W następnym odcinku...

Wiemy już jak definiować skrypty, modelować poziomy, tworzyć zasady ruchu dla NPC ale sporo jeszcze lekcji przed nami. W następnym odcinku wykorzystamy tą wiedzę by stworzyć działający trebusz (katapultę). Będziemy mogli miotać kamiennymi kulami oraz niszczyć otoczenie. Następny artykuł znajduje się pod tym adresem

Od dziś Project Spark jest dostępny dla każdego za darmo

Od 18 marca 2014 nie są wymagane klucze beta. Każdy może ściągnąć aplikację i tworzyć własne gry bez potrzeby wcześniejszej rejestracji. Zlikwidowano także abonament Spark Time który wcześniej ograniczał możliwość grania w gry używające DLC. Teraz każdy może grać we wszystko za darmo nawet jeżeli nie odblokował samemu zawartości DLC.

Project Spark - Sklep Windows 8.1

Na potrzeby tego kursu założyłem dodatkowe konto w grze gdzie będę publikował kod dla poszczególnych lekcji. Aktualnie są tam tylko najnowsze lekcje. Zapraszam. SatiricalCrab94.  

porady programowanie gry

Komentarze

0 nowych
  #1 22.01.2014 20:34

Wciaz czekam na klucz do bety, wyslalem zgloszenie z tydzien temu, oreintujesz się może ile około się czeka?
Mam tez takie pytanie czy w te stworzony gry może grać też kilka/ naście osób na raz (tak jak w mapach z edytora Warcraft 3/ Startcraft 2. Jak jeszcze miałem na dysku to pamiętam że było tego całkiem sporo: Dota, Island Defense, Footy, itd. - z własnymi modelami postaci, dźwiękami, modelami, animacjami, przerywnikami, itd.)?
pozdrawiam

GameDev   4 #2 22.01.2014 22:22

W ubiegłą środę 15-tego autorzy wysłali klucze do wszystkich osób które rejestrowały się przez ostanie 6 miesięcy. Nie ma jakiejś konkretnej daty kiedy wyślą kolejne bo wysyłają to porcjami. Najlepiej spokojnie zaczekać.

Multiplayer został zapowiedziany, nawet pokazany na E3 w demie. Jednak aktualna beta nie ma takich opcji. Zapowiedź jak dokładnie będzie działał multiplayer ma się pojawić w okolicach oficjalnej premiery. Ale nie zdziwiłbym się jakby takie opcje pojawiły się z opóźnienie bo same testy beta też się opóźniły o 3 miesiące. To złożony projekt i sporo jeszcze pracy zostało zanim całość będzie ukończona

GameDev   4 #3 23.01.2014 20:28

W Windows Store pojawiła się nowa wersja edytora Project Spark Beta. Warto zrobić aktualizację bo z pewnością poprawili jakieś błędy. Być może pojawiły się jakieś nowości ale tego dowiemy się jutro z prezentacji na Twitch

twitch.tv/project_spark