Mange spill inkluderer en slags fiende å kjempe med. Utforsk de ulike måtene du kan legge til – og finesse – fiendekamp.

Fiender spiller en avgjørende rolle for å gjøre spill spennende og utfordrende for spillere. Enten du lager et 2D-plattformspill, et skytespill ovenfra og ned eller et rollespill, kan det å legge til fiender forbedre spillopplevelsen betraktelig.

Godots brukervennlige grensesnitt og intuitive skriptspråk, GDScript, gjør prosessen effektiv og morsom.

Sette opp Godot-spillet

Før du dykker inn i fiendens skapelse, sett opp den grunnleggende strukturen til 2D-spillet ditt Godot-spillmotoren.

Lag et nytt 2D-prosjekt i Godot. I hovedscenen oppretter du en ny KinematicBody2D node og navngi den Spiller. Inne i spillernoden legger du til en CollisionShape2D med en rektangelform, som vil være spillerens hitbox. Legg også til en Sprite node som en visuell representasjon av spillerkarakteren.

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

instagram viewer

Legg ved følgende GDScript-kode til Spiller node for å aktivere grunnleggende bevegelse:

extends KinematicBody2D

const SPEED = 200

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

if Input.is_action_pressed("ui_right"):
motion.x += SPEED

if Input.is_action_pressed("ui_left"):
motion.x -= SPEED

if Input.is_action_pressed("ui_down"):
motion.y += SPEED

if Input.is_action_pressed("ui_up"):
motion.y -= SPEED

motion = move_and_slide(motion)

Med denne koden kan spilleren bevege seg til venstre, høyre, opp og ned ved hjelp av piltastene eller WASD-tastene.

Å skape en enkel fiende

Nå som du har satt opp en spillerkarakter, kan du lage en enkel fiende.

Lag en ny scene og legg til en StaticBody2D node navngitt Fiende. Inne i fiendens node legger du til en CollisionShape2D node med en sirkelform for å definere fiendens treffboks. Legg også til en Sprite node for å representere fienden visuelt.

Med kollisjonen satt opp, vil fienden være klar til å samhandle med spilleren og andre elementer i spillverdenen din.

Få en fiende til å følge spilleren

Å skape fiender som følger spilleren gir spillet et nytt nivå av utfordringer.

Lag en ny scene for følgende fiendetype og legg til en KinematicBody2D node navngitt Følg fienden med en CollisionShape2D. Fest følgende GDScript-kode til FollowEnemy-noden for å få den til å følge spilleren:

extends KinematicBody2D

const SPEED = 100

func _physics_process(delta):
var player = get_parent().get_node("Player")
var player_position = player.global_position
var enemy_position = global_position
var direction = player_position - enemy_position
direction = direction.normalized()

var motion = direction * SPEED * delta
move_and_collide(motion)

Nå, den Følg fienden vil bevege seg mot spillerens posisjon i hver ramme.

Legger til fiendtlige kuler

Nå kan du få fienden til å skyte kuler mot spilleren. Lag en ny scene og gi den et navn Bullet.tscn. Legg til en KinematicBody2D node til åstedet. Fest Bullet.gd skript til KinematicBody2D-noden i Bullet.tscn-scenen. Legg til følgende kode for å definere Bullet-klassen:

extends KinematicBody2D

const BULLET_SPEED = 300
var bullet_direction = Vector2.ZERO

func _physics_process(delta):
var motion = bullet_direction * BULLET_SPEED * delta
move_and_collide(motion)

func set_direction(direction):
bullet_direction = direction.normalized()

Nå, lag en ny node for fienden med kuler og navngi den Shooting Enemy. Inne i ShootingEnemy-noden legger du til en CollisionShape2D node med en rektangelform som treffboksen.

Fest følgende GDScript-kode til ShootingEnemy-noden for å få den til å skyte kuler:

extends KinematicBody2D

const SPEED = 100
const SHOOT_DELAY = 1.5
var shoot_timer = SHOOT_DELAY

# Import the Bullet scene
const BulletScene = preload("res://Bullet.tscn")

func _physics_process(delta):

# Shooting logic
shoot_timer -= delta

if shoot_timer <= 0:
shoot_timer = SHOOT_DELAY
var bullet_instance = BulletScene.instance()
bullet_instance.global_position = global_position
bullet_instance.set_direction(direction)
get_parent().add_child(bullet_instance)

Fienden vil nå med jevne mellomrom skyte kuler mot spillerens posisjon. Bruk en betinget hvis uttalelse for å sjekke om shoot_timer er mindre enn 0. Hvis det er det, så skyt kulen.

Tilfeldig bevegelig fiende

I tillegg til fiender som følger etter eller skyter på spilleren, kan en tilfeldig bevegelig fiende injisere et element av uforutsigbarhet og utfordring i spillet ditt. Å skape en fiende med tilfeldige bevegelsesmønstre krever en kombinasjon av enkel logikk og generering av tilfeldige tall.

Start med å lage en ny scene og legg til en KinematicBody2D node navngitt Tilfeldig fiende. Lag et nytt skript med navnet RandomEnemy.gd og fest den til RandomEnemy-noden. Skriptet vil håndtere den tilfeldige bevegelseslogikken.

extends KinematicBody2D

const MOVE_SPEED = 100
const MOVE_INTERVAL_MIN = 1.0
const MOVE_INTERVAL_MAX = 3.0

var move_timer = 0.0
var move_interval = 0.0
var move_direction = Vector2.ZERO

func _ready():
choose_new_direction()

func choose_new_direction():
move_interval = rand_range(MOVE_INTERVAL_MIN, MOVE_INTERVAL_MAX)
move_timer = move_interval
move_direction = Vector2(randf(), randf()).normalized()

func _physics_process(delta):
move_timer -= delta

if move_timer <= 0.0:
choose_new_direction()

var motion = move_direction * MOVE_SPEED * delta
move_and_collide(motion)

Inkludert tilleggsfunksjoner

Det er mange tilleggsfunksjoner du kan legge til fiendene dine for å gjøre spillingen mer interessant.

Bosskamper

Bosskamper fungerer som klimaktiske øyeblikk i spillet ditt, og gir minneverdige og utfordrende møter som tester spillernes ferdigheter og utholdenhet. Sjefsfiender er vanligvis større og kraftigere enn vanlige fiender, og krever at spillere bruker spesifikke strategier og taktikker for å beseire dem.

Dynamisk fiendegyting

Implementer et dynamisk gytesystem som justerer fiendens møter basert på spillerens ytelse, plassering eller hendelser i spillet. Dette skaper en mer responsiv og personlig spillopplevelse.

Miljøtilpasning

Lag fiender som kan tilpasse seg miljøet, for eksempel fiender som kan fly, svømme eller klatre på vegger. Denne allsidigheten åpner for nye spillmuligheter og utfordrer spillere til å navigere i forskjellige terreng.

Fiendens svakheter og motstand

Tildel spesifikke svakheter og motstand til fiender, og oppmuntre spillere til å eksperimentere med forskjellige tilnærminger og taktikker. Noen fiender kan være sårbare for visse angrep eller elementer, mens andre er immune eller motstandsdyktige.

Fiendens tilpasning og atferdsvariasjoner

Legg til et nivå av uforutsigbarhet ved å gi fiender randomiserte atferdsvariasjoner. For eksempel kan en fiende ha forskjellige angrepsmønstre eller bevegelseshastigheter i forskjellige gjennomspillinger, noe som holder spillet friskt og gjenspillbart.

Å inkludere en rekke av disse tilleggsfunksjonene kan berike spillets fiendedesign, noe som gjør hvert møte unikt og minneverdig for spillere.

Husk at selv om det kan være spennende å introdusere ny mekanikk, er det avgjørende å opprettholde balanse og sammenheng i spillets generelle design.

Beste praksis for å skape fiender

Når du lager fiender i Godot-spillet ditt, bør du vurdere følgende beste fremgangsmåter:

Klar visuell kommunikasjon

Bruk distinkte fiendedesign som skiller seg ut fra miljøet for å gjøre fiender lett gjenkjennelige.

Vurder å bruke fargekoding eller unike silhuetter for å skille fiendetyper. Sørg for at fiendtlige animasjoner og visuelle effekter forsterker deres oppførsel og angrep.

Vanskeligheter med å balansere

Introduser fiender gradvis med økende kompleksitet etter hvert som spilleren går gjennom spillet. Test fiendens møter med spillere med varierende ferdighetsnivåer for å sikre at utfordringene passer for alle spillere. Unngå plutselige vanskelighetsgrader som kan frustrere spillere.

Unngå billige bilder

Design fiender med angrep som spilleren kan unngå eller blokkere, og gi dem en sjanse til å reagere. Bruk en rettferdig hitbox for fiendenes angrep, unngå angrep som treffer utenfor deres visuelle representasjon. Bruk advarselsskilt eller signaler for å antyde farlige angrep.

Spilletesting og iterasjon

Test fiendens møter regelmessig under utviklingen for å evaluere morofaktoren og vanskelighetsgraden deres. Samle tilbakemeldinger fra spillere og bruk den til å finjustere fiendens atferd, styrker og svakheter.

Lydeffekter

Lydeffekter spiller en avgjørende rolle for å skape et oppslukende og fengslende spillmiljø. Når en fiende tar et treff, legg til passende opphavsrettsfrie lydeffekter for å forsterke følelsen av påvirkning og engasjement i kamp.

Spillet ditt kan følge hvert slag eller slag med distinkte lydsignaler som tilsvarer typen angrep og fiendens egenskaper.

Gjør Godot-spill mer engasjerende med fiender

Fiender er en grunnleggende komponent i mange spill, og gir utfordringer, hindringer og en følelse av prestasjon når de blir beseiret. Ved å legge til forskjellige typer fiender med varierende oppførsel, helsepoeng og skytemekanikk, kan du skape varierte og engasjerende spillopplevelser for spillere.

Husk å balansere vanskelighetsgraden, gi visuell og auditiv tilbakemelding, og test fiendene dine grundig for å gi spillerne en hyggelig og givende spillopplevelse.