Pelin kehitys Godotilla đŸ€–

Skip to content

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

MistÀ tÀmÀ tieto on perÀisin?

Paljon tÀstÀ on vain uudelleen kertomista Godotin virallisesta dokumentaatiosta. Alla on joitain hyödyllisiÀ linkkejÀ viralliseen dokumentaatioon (jota suosittelen mielellÀni PiggyllÀ olevan sijaan, mutta jos tÀmÀ sopii sinulle paremmin, niin kÀytÀ ihmeessÀ tÀtÀ!)

HyödyllisiÀ resursseja:

EntÀ grafiikka, tÀytyykö sen olla itse tehtyÀ?

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

Muita hyödyllisiÀ linkkejÀ:

Muita pelimoottoreita?

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

On olemassa monia muita myös, etsi ihmeessÀ jos haluat kokeilla jotain muuta!

MikÀ on Godot?

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

EsimerkkejÀ Godotilla luoduista peleistÀ: Godot Showcase

Godotilla ei ole tehty pelkÀstÀÀn indie-pelejÀ, Sonic Colors Ultimate on tehty Godotilla!

Miten saat Godotin?

Voit ladata Godotin joko:

Lataa ja asenna (tai aja SteamissÀ).

Aloita projekti!

Kun aloitat Godot, saat nÀkyviin tÀmÀn ikkunan:

Godot Projekti

TÀssÀ sinulta kysytÀÀn ohjelmointikieltÀ, GDScriptiÀ vai C#:aa. GDScript on hyvin samankaltainen Pythonin kanssa.

Erot GDScriptin ja Pythonin vÀlillÀ (ilman vÀrejÀ):

def hello():
    text = "Hello world!"

    print(text)
func hello():
    var text = "Hello world!"

    print(text)

Muuttujien osalta Pythonissa tarvitset vain muuttujan nimen. GDScriptissÀ sinun tÀytyy kirjoittaa var ensin. Funktioiden luomiseksi kirjoitat func def:n sijaan.

Kohtaukset & Solmut

Yksi tÀrkeimmistÀ kÀsitteistÀ Godotissa ovat Kohtaukset ja Solmut. Voimme aloittaa solmuista. Solmu on objekti Godotissa, ja se voi esittÀÀ mitÀ tahansa. Se voi olla jotain, joka esittÀÀ pelaajan, vihollisen, nappia valikossa, tekstiÀ nÀytöllÀ, mitÀ tahansa. Kohtaukset ovat solmujen kokoelma.

TÀssÀ luomme hyvin yksinkertaisen esimerkin.

Osa 1a - “Pelaaja”-kohtauksen asettaminen

Godot-ikkunan ylĂ€osassa, paina “2D”-painiketta muuttaaksesi nĂ€kymĂ€n 2D-nĂ€kymĂ€ksi.

Ikkunan vasemmalla puolella nÀette seuraavan kÀyttöliittymÀn:

Create Scene

Paina “Other Node” -painiketta, ja hae “CharacterBody2D”, valitse se ja paina “Create”. TĂ€mĂ€ on node, jota kĂ€ytetÀÀn 2D-pelaajalle. EhkĂ€ huomaatte, ettĂ€ “CharacterBody2D” noden vieressĂ€ on varoitustriangulo ⚠. TĂ€mĂ€ johtuu siitĂ€, ettĂ€ se puuttuu joitain asioita, joita se haluaisi.

Jos napsautat nodella hiiren oikealla painikkeella, siellĂ€ on “+ Add Child Node
” -painike. KĂ€ytĂ€ tĂ€tĂ€ ja lisÀÀ kaksi nodea, Sprite2D ja CollisionShape2D. Sprite2D:tĂ€ kĂ€ytetÀÀn grafiikan lisÀÀmiseen pelaajalle, kun taas toista kĂ€ytetÀÀn törmĂ€ysten tarkistamiseen. Voit myös antaa niille nimiĂ€, jos se helpottaa asioiden hallintaa. Olen antanut CharacterBody2D-nodeleni nimen “Player”. NĂ€in kohtauksen pitĂ€isi nĂ€yttÀÀ nyt:

Scene currently

Osa 1b - Korjaa ⚠ CollisionShape2D

Varoituskolmio tĂ€ssĂ€ tapauksessa on se, ettĂ€ CollisionShape2D puuttuu todellinen törmĂ€ys. Voit korjata tĂ€mĂ€n painamalla solmua (vasemmalla), jolloin oikealle puolelle tulee esiin paneeli. TÀÀllĂ€ saat paljon tietoa solmusta, jota voit muuttaa. Kokeile mielellÀÀn eri asetuksilla. Mutta se, johon keskitymme, on “Shape”, aseta tĂ€mĂ€ esimerkiksi RectangleShape2D:ksi. Se ei ole kovin tĂ€rkeÀÀ, emme kĂ€ytĂ€ törmĂ€yksiĂ€ tĂ€ssĂ€.

Osa 1c - LisÀtÀÀn Sprite, grafiikka

Jos painat Sprite2D vasemmalla, avautuu oikealla oleva kenttĂ€, jossa lukee “Texture”. TĂ€hĂ€n kenttÀÀn voi lisĂ€tĂ€ kuvan pelaajalle. RiittÀÀ, ettĂ€ vedĂ€t kuvan kenttÀÀn ja vapautat hiiren.

NÀin se nÀyttÀÀ spriteÀ lisÀttÀessÀ.

Sprite menu

Osa 2 - Syötteen lisÀÀminen, ohjaus

Ikkunan ylĂ€osassa on valikko, “Scene - Project - Debug - Editor - Help”. Paina “Project” ja sen jĂ€lkeen “Project Settings”. TÀÀllĂ€ avautuu valikko, jossa on paljon asetuksia. Paina “Input Map”. TÀÀllĂ€ voitte asettaa nĂ€ppĂ€imet nĂ€ppĂ€imistölle.

  • “Add New Action” -kenttÀÀn kirjoita “left” ja paina “Add”.
  • LisÀÀ sen jĂ€lkeen “right”, “up” ja “down”.
  • NĂ€mĂ€ tulevat tunnetuksi nimellĂ€ “Actions”
  • Jokaiselle “Action” -toiminnolle voitte lisĂ€tĂ€ nĂ€ppĂ€imiĂ€ painamalla oikealla puolella olevaa + -painiketta.

Plus button

  • TÀÀllĂ€ voitte vain painaa nĂ€ppĂ€intĂ€ ja painaa Add.
  • LisÀÀ nĂ€ppĂ€imet kaikkiin toimintoihin.

Osa 3 - LisÀtÀÀn skripti pelaajan ohjaamiseen.

Jotta voimme lisÀtÀ peli-logiikkaa, eli tehdÀ jotain pelaajalle, taustalle tai mihin tahansa muuhun peliin, tarvitsemme skriptin. Skriptit ovat koodia, ja ne voidaan kirjoittaa kahdella kielellÀ, GDScript tai C#. GDScript on oletusarvo.

  • Valitse “CharacterBody2D” (olen nimennyt sen “Player”) -nodu.
  • Paina “Attach Script” -painiketta (katso alla)

Attach script button

  • TĂ€ssĂ€ avautuu ikkuna, jossa voit valita kielen (valitse GDScript) ja polun (anna sen olla oletusarvo, mutta voit antaa sille nimen), ja paina sitten eteenpĂ€in. TĂ€ssĂ€ avautuu “Script” -ikkuna. TÀÀllĂ€ ei ole paljon aluksi.

extends CharacterBody2D

# Dette er en enkel karakterkontroller
# This is a simple character controller
# TÀmÀ on yksinkertainen hahmonohjain

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

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

extends CharacterBody2D

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

Fysiikan prosessi?

_physics_process on funktio, joka pĂ€ivitetÀÀn jokaisessa “framessa”, eli noin 60 kertaa sekunnissa (oletus). On olemassa toinen funktio, joka yksinkertaisesti on nimeltÀÀn _process, joka pĂ€ivitetÀÀn koko matkan. Jos haluat, ettĂ€ pelaaja liikkuu tasaisella vauhdilla, kĂ€ytĂ€ _physics_process.

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

Osa 4 - Perus syöte

Osa 2 lisĂ€sit syöttöpainikkeita, nyt aiotaan kĂ€yttÀÀ niitĂ€. On olemassa sisÀÀnrakennettu objekti, nimeltÀÀn Input, jota voidaan kĂ€yttÀÀ tarkistamaan, onko pelaaja painanut sitĂ€, mitĂ€ olemme mÀÀrittĂ€neet “Input Map” -kohdassa.

Kokeile lisÀtÀ tÀmÀ koodi _physics_process -koodiin:

if Input.is_action_pressed('right'):
   # Flytta karakteren til hĂžyre
   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

Rivit vÀlimat ovat erittÀin tÀrkeitÀ, tÀmÀ on samanlaista 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 'left', 'up', 'down'.

MitÀ velocity.x:n pitÀÀ olla, jotta se liikkuu left-suuntaan? EntÀ up- ja down-suuntiin?

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 - Korjataan koodia

Huomautatte ehkÀ, ettÀ pelaaja ei pysÀhdy, kun lopetat suunnan. Voimme korjata sen nyt!

Kaikkien if-lausekkeiden eteen, lisÀÀ rivi, joka asettaa nopeuden 0:aan. Voit tehdÀ sen kirjoittamalla velocity = Vector2()

Kaikki nopeudet ja suunnat Godotissa ovat vektoreita, tÀmÀ on matematiikan kÀsite, jota emme nyt kÀsittele, mutta jos haluat tietÀÀ enemmÀn siitÀ, mitÀ tÀmÀ tarkoittaa, voit mennÀ tÀnne: Wikipedia vectors.

Koko koodi nyt
extends CharacterBody2D

func _physics_process(delta: float) -> void:
    velovity = 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 aloitat pelin nyt voit liikuttaa pelaajaa:

Voitte jatkaa koodin muokkaamista siten, ettÀ nopeus ei ole vain luku, vaan se voidaan tallentaa toiseen paikkaan.

Voitte esimerkiksi (funktion ennen) lisÀtÀ vakion, joka pitÀÀ kirjaa nopeudesta.

Koko koodi lopussa const-avainsanalla
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 - Leiki vapaasti!

Jos palaatte ensimmÀiseen osaan, Hyödylliset Resurssit, voitte löytÀÀ, millÀ asioilla voitte jatkaa leikkimistÀ.

TÀmÀn jÀlkeen voitte yrittÀÀ luoda oman pelin. MitÀ luotte, on teidÀn valintanne! Jos haluatte luoda jotain aivan uutta, tehkÀÀ niin! Jos haluatte yrittÀÀ jÀljitellÀ jo olemassa olevaa peliÀ, tehkÀÀ niin! Paras tapa oppia on kokeilla!