Hvor kommer denne informasjonen fra?
Mye av dette er bare en gjenfortelling av Godotâs offisielle dokumentasjon. Under finner dere noen nyttige lenker til den offisielle dokumentasjonen (som jeg helst anbefaler over denne pĂ„ Piggy, men hvis du foretrekker denne er det bare Ă„ bruke denne!)
Nyttige ressurser:
Andre nyttige lenker:
Andre game engines?
Hvis du fortrekker kan du bruke andre game engines. Eksempler pÄ andre game engines er:
Det finnes mange andre ogsÄ, sÞk gjerne hvis du vil prÞve noe annet!
Hva er Godot?
Godot (Utalles Guh-doh), er en âGame Engineâ. For Ă„ si det enkelt er det et program som lar deg lage spill (eller vanlige programmer hvis du vil). Godot kan gjĂžre det aller meste andre game-engines kan gjĂžre, bĂ„de 2D og 3D.
Eksempler pÄ spill laget i Godot: Godot Showcase
Det er ikke bare Indie games som har blitt laget i Godot, Sonic Colors Ultimate er laget med Godot! đŠđŠđŠ
Hvordan fÄr du tak i Godot?
Du kan enten laste ned Godot fra:
- Den offisielle siden: Godot Official Page.
- Eller pÄ Steam: Godot Steam.
Bare last ned og installer (eller kjÞr pÄ steam).
Sett opp et prosjekt!
NÄr du starter Godot fÄr du opp dette vinduet:
Her blir du spurt om programmeringssprÄk, GDScript eller C#. GDScript er veldig likt Python.
Forskjeller mellom GDScript og Python (uten farger):
def hello():
text = "Hello world!"
print(text)
func hello():
var text = "Hello world!"
print(text)
For variabler i Python trenger du bare Ä skrive navnet pÄ variabelen. I GDScript mÄ du skrive var
fĂžrst. For Ă„ lage funksjoner skriver du func
i stedet for def
.
Scenes & Nodes
Et av de viktigste konseptene innen Godot er Scenes og Nodes. Vi kan begynne med noder. En node er et objekt i godot, og det kan forestille alt. Det kan vÊre noe some forestiller en spiller, en fiende, en knapp i en meny, tekst pÄ skjermen, alt mulig. Scener er en samling av noder.
Her skal vi lage et veldig enkelt eksempel.
Del 1a - Sett opp âplayerâ-scenen
PĂ„ toppen av Godot vinduet, trykk â2Dâ knappen for Ă„ endre viewet til et 2D view.
PĂ„ venstre side av vinduet ser dere fĂžlgende grensesnitt:
Trykk âOther Nodeâ knappen, og sĂžk pĂ„ âCharacterBody2Dâ, velg den og trykk âCreateâ. Dette er en node som brukes for en 2D spiller. Dere ser kanskje at det er en varseltrekant â ïž ved siden av âCharacterBody2Dâ noden. Dette er fordi den mangler noen ting den gjerne vil ha.
Hvis du hĂžyre-klikker pĂ„ noden er den en â+ Add Child NodeâŠâ knapp. Bruk denne og legg til to noder, Sprite2D og CollisionShape2D. Sprite2D brukes til Ă„ legge til noe grafikk pĂ„ spilleren, mens den andre brukes til Ă„ sjekke for kollisjoner. Du kan ogsĂ„ gi dem navn hvis det gjĂžr det lettere Ă„ holde styr pĂ„ ting. Jeg har gitt min CharacterBody2D navnet âPlayerâ. Slik bĂžr scenen se ut nĂ„:
Del 1b - Fikse â ïž pĂ„ CollisionShape2D
Varseltrekanten i dette tilfellet er at at CollisionShape2D mangler faktisk kollisjon. Dette kan du fikse ved Ă„ tyrkke pĂ„ noden (til venstre), sĂ„ kommer det opp et panel pĂ„ hĂžyre side. Her fĂ„r du en haug med informasjon om noden du kan endre pĂ„. Gjerne lek rundt med det som er der. Men den vi vil fokusere pĂ„ er âShapeâ, sett denne til for eksempel RectangleShape2D. Det er ikke sĂ„ veldig viktig, vi skal ikke bruke kollisjonene her.
Del 1c - Legge til en Sprite, grafikk
Hvis du trykker pĂ„ Sprite2D til venstre, fĂ„r du opp feltet til hĂžyre, der det stĂ„r âTextureâ. Her kan du putte inn et bilde til spilleren. Er bare Ă„ dra inn et bilde Ă„ slippe det i feltet.
Slik vil det se ut etter Ă„ ha lagt til en sprite.
Del 2 - Legge til input, kontroller
PĂ„ toppen av vinduet er det en meny, âScene - Project - Debug - Editor - Helpâ. Trykk pĂ„ âProjectâ og deretter âProject Settingsâ. Her fĂ„r du opp en meny med masse instillinger. Trykk pĂ„ âInput Mapâ. Her kan dere sett opp knapper pĂ„ tastaturet.
- I âAdd New Actionâ feltet, skriv âleftâ ogsĂ„ trykk âAddâ.
- Legg deretter til ârightâ, âupâ og âdownâ.
- Disse blir kjent som âActionsâ
- PĂ„ hver âActionâ kan dere legge inn knapper med Ă„ trykke pĂ„ + knappen til hĂžyre.
- Her er det bare Ä trykke pÄ tastaturet, sÄ trykke Add.
- Legg til knapper pÄ alle actions.
Del 3 - Legge til et script for Ă„ styre spilleren.
For Ä kunne legge til spill-logikk, altsÄ gjÞre noe med spilleren, bakgrunnen, eller hva enn det skulle vÊre i spillet, trenger vi et script. Scripts er kode, og kan skrives i to sprÄk, GDScript eller C#, GDScript er default.
- Trykk pĂ„ âCharacterBody2Dâ (jeg har kalt den âPlayerâ) noden.
- Trykk pĂ„ âAttach Scriptâ knappen (se under)
- Her fĂ„r dere opp et vindu hvor dere kan velge sprĂ„k (velg GDScript) og en path (bare la den hete det som stĂ„r der, men dere kan gi den navn), ogsĂ„ trykk videre. Her fĂ„r dere opp et âScriptâ-vindu. Det stĂ„r ikke mye her til Ă„ begynne med.
extends CharacterBody2D
Det eneste denne koden sier for Ăžyeblikket er at koden skal tilhĂžre en node av typen âCharacterBody2Dâ, som er spilleren vĂ„r.
Vi skal legge til en funksjon her som vi skal bruke til Ă„ manipulere spilleren:
extends CharacterBody2D
func _physics_process(delta: float) -> void:
return
Physics Process?
_physics_process
er en funksjon som oppdateres hver eneste âframeâ, altsĂ„ rundt 60 ganger i sekundet (default). Det finnes en annen funksjon som bare heter _process
, som oppdateres hele veien. Hvis du vil ha at spilleren beveger seg i et jevnt tempo, bruker du _physics_process
.
Det er her vi skal legge til kode som flytter spilleren.
Del 4 - Basic input
I del 2 la du til input-knapper, nÄ skal vi bruke dem. Det finnes et innebygd objekt som heter Input
som vi kan bruke til Ă„ sjekke om spilleren har trykket pĂ„ det som vi har satt opp i âInput Mapâ.
PrĂžv Ă„ legg denne koden inn i _physics_process
koden:
if Input.is_action_pressed('right'):
velocity.x = 100
move_and_slide()
Hva er move_and_slide()
?
move_and_slide()
er en innebygd funksjon i Godot som brukes nÄr vi vil faktisk flytte det vi bruker det pÄ. Uten denne vil ikke spilleren flytte seg.
Warning
Mellomrommet pÄ linjene er veldig viktig, dette er likt som i Python.
Hva skjer nĂ„r du starter programmet med Ă„ trykke pĂ„ play-knappen i Godot vinduet, sĂ„ trykke ârightâ?
Hvis ingenting skjer nÄ:
- Har du husket Ă„ sette opp noe i âInput Mapâ?
- Har du skrevet
right
og ikkeRight
? AltsÄ, er det du skrev i koden det samme som navnet i input map?
Hele koden sÄ langt
extends CharacterBody2D
func _physics_process(delta: float) -> void:
if Input.is_action_pressed('right'):
velocity.x = 100
move_and_slide()
PrÞv nÄ Ä legge til kode for 'left'
, 'up'
, 'down'
.
Hva mÄ velocity.x
vĂŠre for left
? Hva med up
og down
?
Hele koden nÄ
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()
Del 5 - Fikse pÄ koden
Dere legger kanskje merke til at spilleren ikke stopper nÄr du slipper en retning. Det kan vi fikse pÄ nÄ!
FĂžr alle if
-ene, legg til en linje som setter velocity til 0. Det kan du gjĂžre med Ă„ skrive velocity = Vector2()
Alle farter og retninger i Godot er vektorer, dette er et matte-konsept vi ikke skal gÄ inn pÄ nÄ, men hvis du lurer mer pÄ hva dette betyr, kan dere gÄ hit: Wikipedia vectors.
Hele koden nÄ
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()
NÄr du starter spillet nÄ kan du flytte rundt pÄ spilleren:
Videre kan dere fikse pÄ koden til Ä gjÞre at farten ikke bare er et tall, men kan lagres et annet sted.
Du kan for eksempel (fÞr funksjonen) legge til en konstant som holder styr pÄ farten.
Hele koden til slutt med const
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()
Del 6 - Lek rundt selv!
Hvis dere gÄr tilbake til den fÞrste delen, Nyttige Ressurser, kan dere finne hva dere kan fortsette Ä leke med.
Etter dette kan dere prÞve Ä lage deres eget spill. Hva dere lager er opp til dere! Om du vil lage noe helt nytt, gjÞr det! Hvis dere vil prÞve Ä etterligne et spill som allerede eksisterer, gjÞr det! Beste mÄten Ä lÊre pÄ er Ä prÞve!