Pelikehitys Godotin avulla đŸ€–

Skip to content

TÀmÀ on konekÀÀnnetty teksti, joka saattaa sisÀltÀÀ virheitÀ!

MistÀ tÀmÀ tieto tulee?

Paljon tĂ€ssĂ€ on vain uudelleen kerrontaa Godot’n virallisesta dokumentaatiosta. Alapuolella on joitakin hyödyllisiĂ€ linkkejĂ€ viralliseen dokumentaatioon (jota suosittelen mieluiten tĂ€mĂ€n Piggy-version sijaan, mutta jos suosit tĂ€tĂ€, voit kĂ€yttÀÀ vain tĂ€tĂ€!)

HyödyllisiÀ resursseja:

MitÀ grafiikasta, tÀytyykö minun tehdÀ se itse?

Ei! Voit löytÀÀ paljon ilmaisia resursseja tÀÀltÀ:

Muita hyödyllisiÀ linkkejÀ:

Muita pelimoottoreita?

Jos haluat, voit kÀyttÀÀ muita pelimoottoreita. EsimerkkejÀ muista pelimoottoreista ovat:

On olemassa myös monia muita, joten voit hakea lisÀÀ, jos haluat kokeilla jotain muuta!

MikÀ on Godot?

Godot (lausutaan Guh-doh), on pelimoottori (‘Game Engine’). Yksinkertaisesti sanottuna se on ohjelma, jonka avulla voit luoda pelejĂ€ (tai tavallisia ohjelmia, jos haluat). Godot pystyy tekemÀÀn lĂ€hes kaiken, mihin muut pelimoottorit pystyvĂ€t, sekĂ€ 2D- ettĂ€ 3D-muodossa.

EsimerkkejÀ Godotilla tehdyistÀ peleistÀ: Godot Showcase

Godotilla ei ole tehty vain indie-pelejĂ€, myös Sonic Colors Ultimate on tehty Godotilla! 🩔🩔🩔

Miten saat otettua yhteyttÀ Godotiin?

Voit ladata Godotin joko seuraavista lÀhteistÀ:

Lataa ja asentaa vain (tai suorita steamin kautta).

Luo projekti!

Kun aloitat Godotin, tÀmÀ ikkuna avautuu sinulle:

Godot-projekti

TÀssÀ vaiheessa kysytÀÀn ohjelmointikieltÀ, joko GDScript tai C#. GDScript on hyvin samanlainen kuin Python.

Eroja GDSciptin ja Pythonsa vÀlillÀ (ilman vÀrikkyyttÀ):

def hello():
    teksti = "Hei maailma!"

    print(teksti)
func hello():
    var teksti = "Hei maailma!"

    print(teksti)

Muuttujien osalta PYTHONissa riittÀÀ vain kirjoittaa muuttujan nimi. GDSScriptissÀ tÀytyy ensin kÀyttÀÀ sanaa var. Funktion luomiseksi kÀytetÀÀn sanoa func sijaan sanaa def.

Kohtaukset ja solmut

Yksi tĂ€rkeimmistĂ€ kĂ€sitteistĂ€ Godotin sisĂ€llĂ€ ovat kohtaukset (Scenes) ja solmut (Nodes). Voimme aloittaa tĂ€stĂ€ hetkestĂ€ katsomalla ensin solmuja. Solmu on objekti Godotissa, ja se voi edustaa mitĂ€ tahansa. Se voi olla jotain, joka esittÀÀ pelaajaa, vihollista, valikossa olevaa painiketta tai ruudulla nĂ€kyvÀÀ tekstiĂ€ – eli kĂ€ytĂ€nnössĂ€ kaiken mahdollisen. Kuvauksessa kohtaus puolestaan sisĂ€ltÀÀ joukon solmuja.

TÀssÀ teemme hyvin yksinkertaisen esimerkin.

Osa 1a - Luo ”player”-kohtaus

Ikonyyn Godot-ohjelman ylÀosassa paina 2D-painiketta vaihtaaksesi nÀkymÀn 2D-nÀkymÀÀn.

Ihkun vasemmass laidussa nÀet seuraavan kÀyttöliittymÀn:

Create Scene

Paina Other Node -painiketta ja hae termillĂ€ “CharacterBody2D”, valitse se ja paina Create. TĂ€mĂ€ on solmu, jota kĂ€ytetÀÀn kahdenulotteisen pelaajan edustajana. Saatetaan huomata varoituskolmio ⚠ CharacterBody2D-solmun vieressĂ€. SyynĂ€ tĂ€henee, ettĂ€ siltĂ€ puuttuu joitain ominaisuuksia tai asetuksia.

Jos napsautat oikealla hiiren napilla solmua ilmestyy + Add Child Node
 (LisÀÀ lapsisolmu 
) -valinta. KĂ€ytĂ€ tĂ€tĂ€ lisĂ€tĂ€ksesi kaksi uutta solmustoa: Sprite2D ja CollisionShape2D. Solmutta Sprite2D kĂ€ytetÀÀn grafiikan lisÀÀmiseen pelaajaolioon ja toinen kollisioiden tarkistamiseen Voit myös nimetĂ€ ne helpomman hallinnan vuoksi Olen antanut omalle CharacterBody2D-solumullei nimen ”Player”. NĂ€kymĂ€n tulisi nĂ€yttÀÀ tĂ€ltĂ€ juuri nyt:

Scene currently

Osa 1b - Korjaa ⚠ virhe CollisionShape2D:ssĂ€

Varoitusmerkki tĂ€ssĂ€ tapauksessa johtuu siitĂ€, ettĂ€ CollisionShape2D:n törmÀÀminen puuttuu todellisuudessa. Voit korjata tĂ€mĂ€n napsauttamalla solmua (vasemmalle), jolloin oikeanpuoleiseen sivuun avautuu paneeli. TÀÀltĂ€ löydĂ€t runsaasti tietoa muokattavasta solmusta. Kokeile rohkeasti eri asetuksia. TĂ€rkeimmĂ€nĂ€ kohteena on kuitenkin ”Muoto” (Shape); aseta se esimerkiksi arvoon RectangleShape2D. Ei ole niin tĂ€rkeÀÀ, emme kĂ€ytĂ€ tĂ€hĂ€n tarkoitukseen törmĂ€yksiĂ€.

Osa 1c – LisÀÀ spritesuunnitelma ja grafiikka

Jos napsautat vasemmassa reunassa olevaa kohtaa Sprites2d, oikealla puolella nĂ€kyviin avataan kenttĂ€ nimeltĂ€ “Tekstuurit”. TĂ€hĂ€n voit lisĂ€tĂ€ kuvan pelaajalle. Raahaa kuva tĂ€hĂ€n kenttÀÀn pudottamalla se siihen.

NÀÀltÀ asia nÀyttÀÀ spriten lisÀÀmisen jÀlkeen.

Spritemap valikko

Osa 2 – Syöttöjen lisÀÀminen ja tarkistus

Ikkunan ylĂ€osassa on valikko “Scene–Project–Debug–Editor–Help”. Napsauta “Project” ja sen jĂ€lkeen “Project Settings”. TĂ€ssĂ€ vaiheessa aukeaa asetusvalikko. Valitse “Input Map”。TĂ€stĂ€ voit mÀÀrittÀÀ nĂ€ppĂ€imistön painikkeet.

  • LisÀÀ uuden toiminnon kentÀÀn teksti ”vasen”, sitten napsauttamalla ”LisÀÀ.”
  • LisÀÀ myös toiminnot oikea-, ylös‑ja alasliike.
    *NÀmÀ tunnistetaan nimellÀ Toiminnot (actions).
    Kunkin toiminnon kohdalle voi lisÀtÀ nappeja klikkaamalla viereistÀ plusmerkki-painiketta (+):

Plus-napit

Voitte nyt vainpainella nĂ€ppĂ€imiĂ€ tietokoneessanne sekĂ€ myötĂ€illĂ€ niissĂ€ olevia kuvioita tai muotoiluja kĂ€yttĂ€mĂ€llĂ€ hiirta tai kosketuslevyĂ€.. Lopuksi tallentaksemme kaikki muutokset, palataan takaisin pÀÀikkunaan josta aloitimme tekemisen


Osa 3 – LisÀÀ ohjelmakoodi pelaajan hallintaan

Jotta pelilogiikkaa voi lisÀtÀ ja esimerkiksi vaikuttaa pelaajaan, taustaan tai mihin tahansa muuhun pelissÀ olevaan elementtiin, tarvitsemme ohjelmakoodin (script). Ohjelmakoodit ovat koodia, joita voidaan kirjoittaa joko GDScriptillÀ tai C#:lla; oletuskielenÀ on GDScript.

  • Valitse solmu “CharacterBody2D” (minulla se nimettiin ”Player”).
  • Napsauta painiketta “LiitĂ€ skripti” (katso alla).

LiitÀ-skript-painike

TĂ€ssĂ€ vaiheessa avautuu ikkuna, jossa voit valita kielen (valitse GDScript) sekĂ€ tiedoston polun (voi olla sama kuin esitetty arvo, mutta nimen voi halutessaan antaa itse). Jatka painamalla sitĂ€. TĂ€mĂ€n jĂ€lkeen nĂ€kyviin tulee Skripti-ikkuna (“Script”), joka aluksi nĂ€yttÀÀ tyhjĂ€ltĂ€.

extends CharacterBody2D

TĂ€llĂ€ hetkellĂ€ tĂ€mĂ€ koodi sanoo vain, ettĂ€ koodin tulee kuulua “CharacterBody2D”-tyyppiselle nodelle, joka on pelaajamme.

LisÀÀmme tÀhÀn funktion, jota kÀytÀmme pelaajan manipulointiin:

extends CharacterBody2D

func _physics_process(delta: float) -> void:
    return

Fysikkprosess?

_physics_process on funktio, jota pÀivitetÀÀn jokaisen ruudun kohdalla eli oletusarvoisesti noin 60 kertaa sekunnissa. Toiminnossa _process pÀivitys tapahtuu koko ajan. Jos haluat pelaajan liikkuvan tasaisella tahdilla, kÀytÀ _physics_process:a.

TÀssÀ on paikka, johon lisÀtÀÀn koodi, joka siirtÀÀ pelaajaa.

Osa 4 – Perussyöttö

Osaan 2 lisĂ€sit syöttönappulat, ja nyt kĂ€ytĂ€mme niitĂ€ olemassa olevan sisÀÀnrakennetun olion, nimeltÀÀn Input, avulla voimme tarkistaa onko pelaaja painanut jotakin sitĂ€ mitĂ€ me asetamme “Syöttökartta”-asetuksiin.

Kokeile liittÀÀ tÀmÀ koodi physics_prosessiin:

if Input.is_action_pressed('right'):
    velocity.x = 100

move_and_slide()

MikÀ on move_and_slide()?

move_and_slide() on sisÀÀnrakennettu funktio Godotissa, jota kÀytetÀÀn silloin, kun haluamme todella liikuttaa sitÀ, mihin se on sovellettu. Ilman tÀtÀ pelaaja ei liiku.

Warning

Rivien vÀlinen tila on hyvin tÀrkeÀÀ, tÀmÀ on sama kuin Pythonissa.

MitĂ€ tapahtuu, kun kĂ€ynnistĂ€t ohjelman painamalla “play”-painiketta Godot-ikkunassa, ja sitten painamalla “right”?

Jos ei tapahdu mitÀÀn nyt:

  • Oletko muistanut asettaa jotain “Input Map” -osiossa?
  • Oletko kirjoittanut right ja et Right? Eli, kirjoititko koodissa saman nimen kuin “input map” -osiossa?

Koko koodi tÀhÀn asti
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100

    move_and_slide()

YritÀ nyt lisÀtÀ koodi koodeille 'left', 'up', 'down'.

MinkÀ tÀytyy olla velocity.x, jotta saadaan left? EntÀ up ja down?

Koko koodi nyt
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

Osa 5 – Koodin korjaaminen

Huomaatte ehkÀ, ettÀ pelaaja ei pysÀhdy, kun pÀÀstÀt suunnan irti. Voimme nyt tehdÀ tÀhÀn muutoksen!

LisÀÀ kaikki if-lausekkeet ennen riviÀ, joka asettaa nopeuden arvoon 0. Voit tehdÀ tÀmÀn kirjoittamalla velocity = Vector2().

Kaikki nopeatuuksien ja suuntatietotyypit ovat Godotissa vektoreita; tÀmÀ on matemaattinen kÀsite, jota emme mene tarkemmin lÀpi tÀssÀ vaiheessa, mutta jos haluat tietÀÀ lisÀÀ siitÀ, mitÀ se tarkoittaa, voit katsoa sen osoitteesta: Vektorit Wikipedia-artikkelina (englanniksi).

Koko koodi nyt
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    velocity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

Kun kun voit pelata nyt siirtÀÀ pelaajaa ympÀriinsÀ:

Voit myös muuttaa koodia siten ettÀ nopeus ei ole vain luku vaan se voidaan sÀilyttÀÀ toisessa paikassa.

Sinun esimerkiksi ennen funktiota voi lisÀtÀ vakion joka pitÀÀ huolen noopeudesta.

Koko lopullinen koodi const:lla
extends CharacterBody2D

const SPEED = 100

func _physics_process(delta: float) -> void:
    velovity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = SPEED
    if Input.is_action_pressed('left'):
        velocity.x = -SPEED
    if Input.is_action_pressed('down'):
        velocity.y = SPEED
    if Input.is_action_pressed('up'):
        velocity.y = -SPEED

    move_and_slide()

Osa 6 – Kokeile itsekin!

Jos palaat ensimmÀiseen osaan HyödyllisiÀ resursseja löydÀt siitÀ vinkkejÀ siihen mitÀ voit edelleen kokeilla ja kehittÀÀ.

TÀmÀn jÀlkeen voit yrittÀÀ luoda oman pelisi. MitÀ teet on sinun pÀÀttÀÀsi! Jos haluat tehdÀ jotain tÀysin uutta tee se! Jos taas haluat jÀljitellÀ jo olemassa olevaa peliÀ niin tee sitÀ! Parasta tapaa oppia on kokeilu!