◉ VR-kurser
▶ Spela webbversionen

15. Monster och spawner

Målet

Lägg till två CC0-monster: 3D Horror Game Monster och Spider av br-n518. Du behöver inte kunna animera för att börja: läs först hur en fiende får hälsa, position och rörelse. GLB-filerna läses in med GLTFLoader. Båda har tre träffpoäng. Spindeln tar sats nära spelaren och gör ett kodstyrt hopp. Öppna main.js och level.js.

Ett monster är både modell och speldata

anchor är gruppen i 3D-scenen. Objektet monster innehåller speldata: art, hälsa, om den är död, attacktimer, hopptimer och nästa vägpunkt. Modellen kan laddas klart senare, men monsterposten finns redan. Det är därför rörelse- och skaderegler inte ska bero på modellens filformat.

const monster = {
  anchor,
  kind: 'horror',
  health: RULES.monsterHealth,
  dead: false,
  waypoint: null
};

Det här är en förkortad illustration. Den riktiga posten har fler timers. När health når noll sätts dead = true innan modellen tas bort efter en kort fördröjning, så att ett andra skott inte räknar samma fiende igen.

spawnMonster() väljer bara en spawnpunkt som är minst sex meter från spelaren. Max fyra monster är samtidigt aktiva. Nya försök sker var sjätte sekund. nextPathStep() söker en väg genom ett rutnät så monster tar sig runt väggarna i stället för att gå rakt igenom dem. Först väljs spawnpunkt, därefter art, sedan läses modellen in. Se kapitel 16 för vägvalet steg för steg.

if (distanceToPlayer >= RULES.minimumSpawnDistance && monstersAlive < RULES.maxMonsters) {
  spawnMonster();
}

Skottet testar siktlinjen mot väggar och dörrar före monstret. En vägg ska alltså kunna skydda både spelare och monster. När hälsan når noll räknas en kill och monstret tas bort.

Testa

Modellerna är CC0 enligt respektive OpenGameArt-sida. Horror Game Monsters FBX-konverterade skelett får fel skala i Three.js. Webbversionen använder därför originalmodellens synliga mesh och animerar armar, ben och kropp i kod när monstret går. Modellen vänds mot sin färdriktning; den har en annan framåtriktning än spindeln. Spindelns GLB-animationer används direkt. De tidigare kuberna och övningsmålet finns kvar i Godot-kursens tidiga kapitel men ingår inte i den färdiga flyktbanan.

Gör själv

Ändra RULES.minimumSpawnDistance i din kopia från 6 till 9. Starta om flera gånger och notera om antalet möjliga spawnpunkter minskar. Återställ värdet. Höj inte antalet monster samtidigt: en ändring i taget gör det möjligt att förstå effekten.