Hvordan lage nivåer i Godot-spill

Å lage nivåer er et avgjørende aspekt ved spilldesign som kan forbedre spillets generelle appell betraktelig. Nivåer gir strukturen og utfordringene som holder spillerne engasjert og motivert til å komme seg videre gjennom spillet ditt.

Ved å lage nøye utformede nivåer kan du skape en mer oppslukende og fornøyelig opplevelse for spillerne dine. Enten du er nybegynner eller erfaren spillutvikler, gjør Godot det enkelt å lage fengslende nivåer som får spillere til å komme tilbake for mer.

Sette opp Godot-spillet

Før du begynner å lage nivåer, er det viktig å sette opp 2D-spillprosjektet ditt i Godot Game Engine.

Koden som brukes i denne artikkelen er tilgjengelig i denne GitHub-depot og er gratis for deg å bruke under MIT-lisensen.

Opprett en ny scene og legg til en Node2D-node som rotnoden. Dette vil fungere som beholderen for alle andre noder i scenen din. Nå som prosjektet ditt er satt opp, er det på tide å legge til spillerkarakteren til scenen.

Opprett en ny scene ved å høyreklikke i scenepanelet og velge Ny scene. Legg til en CharacterBody2D-node for å representere spillerkarakteren. CharacterBody2D-noden har innebygde funksjoner for bevegelses- og kollisjonsdeteksjon for 2D-karakterer.

Inne i CharacterBody2D-noden legger du til en CollisionShape2D-node med en rektangelform og en Sprite-node for å representere spillerens utseende.

Med spillerkarakteren og dens visuelle innstilling, kan du nå fokusere på å lage ditt første nivå.

Lag to nivåer

For å lage nivåer i Godot kan du bruke scenefiler (.tscn) for å representere hvert nivå separat. Med to nivåer kan du implementere unike oppsett og bevegelige plattformer.

  19 beste skjermopptaker for Mac

Spillerkode

CharacterBody2D-skriptet er ansvarlig for å håndtere spillerens bevegelse basert på brukerinndata. I det medfølgende GDScriptet kan du beregne bevegelsesretningen basert på tastetrykk og stille inn spillerens hastighet deretter.

Spillerens hastighet avgjør hvor raskt de beveger seg, og move_and_collide-funksjonen tar seg av kollisjonsdeteksjon.

 extends CharacterBody2D

var speed = 300

func _physics_process(delta):
    var input_dir = Vector2.ZERO

    if Input.is_action_pressed("ui_left"):
        input_dir.x -= 1

    if Input.is_action_pressed("ui_right"):
        input_dir.x += 1

    if Input.is_action_pressed("ui_up"):
        input_dir.y -= 1

    if Input.is_action_pressed("ui_down"):
        input_dir.y += 1

    velocity = input_dir.normalized() * speed
    move_and_collide(velocity * delta)

Plattformkode

Plattformskriptet utvider StaticBody2D, noe som betyr at plattformen ikke vil bevege seg med mindre du bruker en bevegelse på den. I dette tilfellet kan du bruke variabelen move_speed for å kontrollere hvor raskt plattformen beveger seg.

Plattformen beveger seg horisontalt frem og tilbake innenfor det angitte området (100 til 400 enheter i dette eksemplet). Når den når kanten, snur den bevegelsesretningen.

 
extends StaticBody2D

const move_speed = 100
var move_direction = Vector2(1, 0)

func _physics_process(delta):
    var platform_movement = move_direction * move_speed * delta
    translate(platform_movement)

    
    if position.x > 400 or position.x < 100:
        move_direction *= -1

Ved å bruke disse skriptene kan du lage interessante bevegelsesmønstre for plattformer og designe engasjerende spillopplevelser i plattformspillene dine.

Koblingsnivåer

I et typisk spill vil du at spillere skal gå sømløst fra ett nivå til et annet. For å gjøre det, implementer et Level Manager-skript som håndterer nivåbytte når spilleren krysser skjermgrensen.

Level Manager-skriptet holder styr på gjeldende nivånummer og skjermstørrelse. Den laster inn startnivået (nivå 1) under _ready(). load_level-funksjonen tar et nivånummer som input, konstruerer banen til den korresponderende scenefilen og instansierer nivåets scene.

Legg til det nye nivået som et underordnet nivå av Level Manager; dette vil effektivt bytte gjeldende nivå.

 extends Node2D

var level_number = 1
var screen_size = Vector2()
var is_switching_level = false

func _ready():
    screen_size = get_viewport_rect().size
    load_level(level_number)

func load_level(level):
    var level_path = "res://Level" + str(level) + ".tscn"
    var level_scene = load(level_path)
    var level_instance = level_scene.instantiate()
    add_child(level_instance)
    is_switching_level = false

func switch_level():
    if is_switching_level:
        return

    is_switching_level = true
    level_number += 1

    if level_number > 2:
        level_number = 1

    
    var player = get_node("Node2D/Player")

    if player:
        var player_position = player.position

        if player_position.x < 0:
            player.position.x = screen_size.x
        elif player_position.x > screen_size.x:
            player.position.x = 0
        elif player_position.y < 0:
            player.position.y = screen_size.y
        elif player_position.y > screen_size.y:
            player.position.y = 0

    get_node("Node2D").queue_free()
    load_level(level_number)

func _process(delta):
    
    
    var player = get_node("Node2D/Player")

    if player:
        var player_position = player.position
        var condition1 = player_position.x < 0
        var condition2 = player_position.x > screen_size.x
        var condition3 = player_position.y < 0
        var condition4 = player_position.y > screen_size.y

        if condition1 or condition2 or condition3 or condition4 :
            switch_level()

Ved å implementere Level Manager kan du sømløst skifte mellom nivåer og vedlikeholde spillerdata på tvers av nivåer, noe som sikrer en jevn spillopplevelse.

  Hvordan komme i gang med maskinlæring?

Inkludert tilleggsfunksjoner

Ved å lage nivåer kan du legge til ulike funksjoner i spillet ditt, noe som gjør det mer engasjerende og spennende for spillere.

Samleobjekter

Legg til samleobjekter som mynter, stjerner eller nøkler som spillere kan samle for å låse opp nye områder eller motta belønninger. Samleobjekter oppmuntrer til utforskning og legger til et lag med utfordringer til spillingen.

Fiender

Introduser fiender med ulik atferd og bevegelsesmønstre. Fiender skaper hindringer for spilleren å overvinne, og legger til strategi og spenning til spillet.

Power-ups

Inkluder power-ups som midlertidig øker spillerens evner, for eksempel økt hastighet, uovervinnelighet eller forbedrede angrep. Power-ups gir øyeblikk av styrking og kan hjelpe spillere å overvinne utfordrende seksjoner.

Gåter

Design puslespillelementer som spillerne må løse for å komme seg gjennom nivået. Gåter gir et cerebralt aspekt til spillingen og kan få spillere til å føle seg ferdige når de finner ut av dem.

  Slik bruker du retningslinjer for å stille opp PowerPoint-objekter

Ved å inkorporere disse tilleggsfunksjonene i nivåene dine, kan du skape en rik og variert spillopplevelse som fengsler spillere og holder dem fordypet i spillverdenen din.

Beste praksis for å lage nivåer

Når du oppretter nivåer, kan det å holde visse beste fremgangsmåter i bakhodet bidra til å sikre en godt laget og hyggelig opplevelse for spillere:

Balansevansker

Oppretthold en jevn vanskelighetskurve gjennom nivåene dine. Øk utfordringene gradvis for å holde spillerne engasjert uten å overvelde dem. Introduser ny mekanikk og utfordringer gradvis, slik at spillerne kan tilpasse seg og lære.

Oppmuntre til leting

Design nivåer med skjulte stier, hemmeligheter og valgfrie områder for spillere å utforske. Utforskning belønner spillere med bonuser, samleobjekter eller snarveier, noe som gir dybde til spillingen.

Testing og iterasjon

Spilltest nivåene dine grundig for å identifisere eventuelle problemer, feil eller ubalanser. Gjenta nivådesignet basert på tilbakemeldinger fra spillere for å forbedre den generelle opplevelsen.

Bilde og lyd

Vær oppmerksom på de visuelle og lydmessige aspektene ved nivåene dine. Engasjerende grafikk og opphavsrettsfrie lydeffekter kan i betydelig grad bidra til atmosfæren og innlevelsen i spillet ditt.

Nivåflyt

Sørg for at nivåflyten er jevn og logisk. Led spillere gjennom nivået med klare visuelle signaler, og unngå blindveier eller forvirrende oppsett.

Ved å følge disse beste fremgangsmåtene kan du lage nivåer som ikke bare er morsomme å spille, men også godt utformet og sammenhengende innenfor konteksten av spillet ditt.

Nivåer gjør Godot-spillene dine mer engasjerende

Nivåer spiller en sentral rolle for å gjøre Godot-spill mer engasjerende for spillere. Godt utformede nivåer gir en følelse av progresjon, prestasjon og utforskning, og lokker spillere til å fortsette å spille.

Ved å forstå prinsippene for nivådesign, utnytte Godots evner og implementere tilleggsfunksjoner, kan du lage nivåer som fengsler spillere og løfter spillet ditt til nye høyder.