2D-pelin kehittäminen Godot Enginellä
Miettinen, Teemu (2019)
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2019052010596
https://urn.fi/URN:NBN:fi:amk-2019052010596
Tiivistelmä
Godot Engine on melko nuori ja huomiotta jäänyt pelimoottori. Silti se varsinkin vuosina 2017−2019 on kehittynyt melkoisesti ja on pian varteenotettava kilpailija jo tunnettujen Unity3D:n ja Unreal Engine 4:n rinnalla. Godot Engine on kevytrakenteinen ja monimuotoinen 2D- ja 3D-pelimoottori, mutta erityisesti se on keskittynyt 2D-pelien kehittämiseen. Kuitenkin Godot Enginellä on mahdollista tehdä hyvinkin näyttäviä 3D-pelejä, mutta grafiikan taso ei yllä kuitenkaan vielä ns. AAA-pelimoottorien tasolle. Godot Enginen suurin vahvuus onkin sen kevytrakenteisuus, helppokäyttöisyys ja laaja alustatuki. Kokemattomankin ohjelmoijan on helppo ottaa pelimoottori käyttöön. Helppokäyttöisyys näkyy myös GDScriptissä, eli Godot Enginen omassa ohjelmointikielessä, sillä se on helppo oppia yksinkertaisen syntaksinsa ansiosta. Godot Enginessä on myös tuki muille ohjelmointikielille, kuten C# ja C++.
Godot Engine koostuu pääosin kahdesta peruskomponentista; scene eli näkymä ja node eli solmu. Näkymän on suurempi kokonaisuus, joka koostuu useasta eri solmusta. Solmu taas on näkymän oma komponentti, joka voi sisältää oman skriptinsä ja omia ominaisuuksiaan. Näkymiin voi kuitenkin instansoida muita näkymiä ja näin ollen saada myös instansoidun näkymän solmut käyttöön. Näkymien instansointi toisiinsa johtaa siihen, että projektit saavat puumaisen rakenteen. Puumaisen rakenteen myötä projekteja on helppo havainnollistaa, että suunnitella.
Pelinkehitykseen Godot Engine tarjoaa monenlaisia ratkaisuja ja oikeanlainen toteutustapa riippuu täysin meneillään olevasta peliprojektista. Lähtökohtaisesti projekti on syytä jakaa eri näkymiin, kuten pelaajanäkymään, kenttänäkymään, käyttöliittymänäkymään ja AI-näkymään. Tämänkaltainen lähestymismalli mahdollistaa näkymien instansoimisen omiin puuhaaroihin, mikä taas helpottaa komponenttien hahmottamista ja toteutusta. Solmutyyppien suunnittelu on myös syytä toteuttaa huolella, sillä tietyntyyppiset solmut tarjoavat eri ominaisuuksia, kuten erilaisia signaaleja. Signaalien avulla esimerkiksi törmäystarkastukset on helppo toteuttaa. AI:n osalta Godot Engine ei tarjoa vielä kovin laajoja kokonaisuuksia, vaan tekoälyn joutuu suunnittelemaan suurilta osin itse. Reitinhaun osalta Godot Engine tarjoaa kuitenkin hyviä toteutusvaihtoehtoja, kuten navmesh-navigoinnin ja A*-reitinhaun.
Godot Engine on kokonaisuutena kelpo pelimoottori käytettäväksi 2D-peliprojekteihin ja aloitteleville peliohjelmoijille helppo oppia. Kaupallisiin projekteihin Godot Engine tarjoaa myös kustannustehokkaan pelimoottorin, sillä MIT-lisenssin alla oleva moottori on käytännössä ilmainen. Suunnitteluvaiheessa on vain syytä muistaa Godot Enginen erilaisuus muihin moottoreihin nähden, ja suunnitella peliprojektit moottorin ominaisuuksien mukaan ja niitä hyödyntäen. Godot Engine is quite young and disregarded game engine. Still it has been improving a lot in 2017 – 2019 and it will be soon worthy competitor for Unity3D and Unreal Engine 4. Godot Engine is light weighted and diverse 2D and 3D game engine, but it is built especially for 2D games. However, it is possible to do quite polished 3D games with it, yet the graphical output is not so fantastic as with the triple-A game engines. In this Bachelor’s thesis, the main focus was in 2D game development functionalities and how these functionalities work in Godot Engine. This game engine provides also its own programming language GDScript, but it also supports more commonly used programming languages like C++ and C#.
Godot Engine is composed of two main components; Scene and Node. Scene is a bigger entity, which contains one or multiple Nodes. Node is its own component in the Scene, and it can contain its own unique script and other functionalities. However, there is a possibility to instance a Scene to another Scene. In this way, Scene can get other Scenes Nodes and their functionalities. This instance system results a tree like structure to the project, which makes projects easy to plan and demonstrate.
Godot Engine offers many solutions to build games and there is not one right solution. But as a baseline, a project should spare to different scenes, like a player scene, a map scene, a UI scene and AI scene. This manner of an approach allows these scenes to be instanced in the tree like hierarchy. Node types should also be designed in carefully, because different type of nodes allows different properties like special signals. For example, collision detections are very easily done by these signals. Thus, for fast and easy approaches nodes should be planned with care. AI systems are lacking in Godot Engine, so developers have to build these kind of systems themselves. However, for AI-navigation Godot Engine provides many easy in build solutions like navmeshes and A*-navigation.
Overall, Godot Engine is a very flexible and modern game engine, at least for 2D games. 3D side is, however, improving all the time. In future, by today’s statics, Godot Engine may not replace, but become a considerable alternative along with Unity3D, Unreal Engine and other triple-A game engines.
Godot Engine koostuu pääosin kahdesta peruskomponentista; scene eli näkymä ja node eli solmu. Näkymän on suurempi kokonaisuus, joka koostuu useasta eri solmusta. Solmu taas on näkymän oma komponentti, joka voi sisältää oman skriptinsä ja omia ominaisuuksiaan. Näkymiin voi kuitenkin instansoida muita näkymiä ja näin ollen saada myös instansoidun näkymän solmut käyttöön. Näkymien instansointi toisiinsa johtaa siihen, että projektit saavat puumaisen rakenteen. Puumaisen rakenteen myötä projekteja on helppo havainnollistaa, että suunnitella.
Pelinkehitykseen Godot Engine tarjoaa monenlaisia ratkaisuja ja oikeanlainen toteutustapa riippuu täysin meneillään olevasta peliprojektista. Lähtökohtaisesti projekti on syytä jakaa eri näkymiin, kuten pelaajanäkymään, kenttänäkymään, käyttöliittymänäkymään ja AI-näkymään. Tämänkaltainen lähestymismalli mahdollistaa näkymien instansoimisen omiin puuhaaroihin, mikä taas helpottaa komponenttien hahmottamista ja toteutusta. Solmutyyppien suunnittelu on myös syytä toteuttaa huolella, sillä tietyntyyppiset solmut tarjoavat eri ominaisuuksia, kuten erilaisia signaaleja. Signaalien avulla esimerkiksi törmäystarkastukset on helppo toteuttaa. AI:n osalta Godot Engine ei tarjoa vielä kovin laajoja kokonaisuuksia, vaan tekoälyn joutuu suunnittelemaan suurilta osin itse. Reitinhaun osalta Godot Engine tarjoaa kuitenkin hyviä toteutusvaihtoehtoja, kuten navmesh-navigoinnin ja A*-reitinhaun.
Godot Engine on kokonaisuutena kelpo pelimoottori käytettäväksi 2D-peliprojekteihin ja aloitteleville peliohjelmoijille helppo oppia. Kaupallisiin projekteihin Godot Engine tarjoaa myös kustannustehokkaan pelimoottorin, sillä MIT-lisenssin alla oleva moottori on käytännössä ilmainen. Suunnitteluvaiheessa on vain syytä muistaa Godot Enginen erilaisuus muihin moottoreihin nähden, ja suunnitella peliprojektit moottorin ominaisuuksien mukaan ja niitä hyödyntäen.
Godot Engine is composed of two main components; Scene and Node. Scene is a bigger entity, which contains one or multiple Nodes. Node is its own component in the Scene, and it can contain its own unique script and other functionalities. However, there is a possibility to instance a Scene to another Scene. In this way, Scene can get other Scenes Nodes and their functionalities. This instance system results a tree like structure to the project, which makes projects easy to plan and demonstrate.
Godot Engine offers many solutions to build games and there is not one right solution. But as a baseline, a project should spare to different scenes, like a player scene, a map scene, a UI scene and AI scene. This manner of an approach allows these scenes to be instanced in the tree like hierarchy. Node types should also be designed in carefully, because different type of nodes allows different properties like special signals. For example, collision detections are very easily done by these signals. Thus, for fast and easy approaches nodes should be planned with care. AI systems are lacking in Godot Engine, so developers have to build these kind of systems themselves. However, for AI-navigation Godot Engine provides many easy in build solutions like navmeshes and A*-navigation.
Overall, Godot Engine is a very flexible and modern game engine, at least for 2D games. 3D side is, however, improving all the time. In future, by today’s statics, Godot Engine may not replace, but become a considerable alternative along with Unity3D, Unreal Engine and other triple-A game engines.