Melee-kamp er en favoritt tidsfordriv i videogameland, kjernen i utallige serier, både kjente og obskure, og en spenst og gripende opplevelse når det er gjort riktig. Mange en spillutvikler har tatt et spill av to vesener som stikker det ut til man ikke kan stekke mer og tenkte, "dette ville være så mye bedre hvis det var tonn av ondskapene! "Noen ganger er dette sant, men ofte er summen større enn sine deler, og det er ikke så spennende, dypt eller nyansert å kjempe en gang om gangen og kjempe med mange" onde "på en gang..
Mange melee kamp spill bruker ikke noen spesielt spesielle AI når du kjemper mot flere motstandere. Dette betyr ofte at kamp mot to motstandere er eksponentielt vanskeligere enn å bekjempe en, fordi de begge vil angripe samtidig, men du kan bare virkelig motsette seg en av dem. I verste fall, når du kjemper mot horder av fiender, kan dette bety at den optimale strategien er å lede fienden til en enkeltfil linje, og deretter angripe dem en om gangen mens backpedaling! Det føles ikke veldig fantastisk eller spennende, gjør det?
Skriv inn "kampsirkelen". Dette er et stykke AI-kode som forteller at fiender forsettlig omslutter seg rundt spilleren og bare angriper når spilleren har en sjanse til å reagere. Dette tvinger fiender til å kjempe i en stil og tempo som er mye mer moro for spilleren ... selv om det egentlig er en virkelig dårlig kamp taktikk!
Hovedårsaken til at du vil bruke kampsirkler er å la spilleren føle som om de kjemper for mange fiender samtidig, uten at de faktisk står overfor ekte utfordring å bekjempe mange fiender samtidig. Således er en kampsirkel i utgangspunktet en illusjon. Du har med vilje gjort ting lettere for spilleren, slik at de kan oppleve fantasi å ta på en haug med dudes på en gang og vite at du kommer til å komme ut i live, akkurat som i noen kampsportsfilm.
En kampsirkel trenger ikke å fungere på samme måte for hvert spill; Hvis du velger å bruke en, må du bruke tid på å skreddersy den til spillet ditt. På den ene enden av spekteret har du "kinematiske" slagkretser, som i Assassin's Creed eller Batman: Arkham Asylum, hvor fiender tålmodig venter på sin tur før de forsøker å angripe, og gi spilleren rikelig med advarsel om å håndtere innkommende angrep. På den andre enden har du "farlige" slagkretser, som i mørke sjeler, hvor fiender vil forsøke å holde seg utenfor hverandres måte, men ellers har ikke noe problem å mobbere deg en masse.
Jeg bruker ordene "kinematisk" og "farlig" for å beskrive hvilken type erfaring spilleren forventes å ha når de er inne i sirkelen; er det mer av en spennende audiovisuell opplevelse som spilleren burde føle komfortabel i, eller skal det være en sårbar posisjon spilleren bør prøve å unngå?
Dette konseptet kan forenkles videre som bare å styre mengden av press på spilleren. Spesielt er dette mengden motivasjon spilleren har til å reagere på fiender i kampsirkelen. En lavtrykkssirkel vil la spilleren vente på innkommende angrep for å motvirke, eller fortsette å angripe en bestemt fiende uten umiddelbar gjengjeldelse. En høytrykksirkel vil tvinge spilleren til å velge "slåss eller fly" så snart de er i sirkelen, slik at det å komme inn i sirkelen i utgangspunktet bør være en forutgående taktisk beslutning. Mens du er inne i en slik farlig sirkel, må spilleren umiddelbart avgjøre hvem du skal angripe, hvem du skal motvirke, og når og hvordan du skal unnslippe.
Jeg har gitt en fullt funksjonell, hvis minimalistisk arena-stil beat-em-up i eksemplet Unity-filer. Hvis du ikke bruker Unity, bør du fortsatt ha en grov ide om hvordan du tilpasser kampsirkelkoden til hvilket språk og motor du bruker. Filene du vil være interessert i er EnemyMob.cs og SwordzPlayer.cs.
Her er kampsirkelen i aksjon. Klikk på demoen for å gi den fokus, bruk piltastene til å flytte og trykk X å biff.Kampsirkelen AI fungerer i utgangspunktet slik (fra fiendens perspektiv):
Først går du mot spilleren til jeg kommer innenfor en "fare" -radius
Mens du er i "fare" -modus, ikke bli for nær en annen fiende, med mindre jeg får lov til å angripe spilleren. (Se Avoider.cs.)
Også i "fare" -modus, prøv å nærme spilleren. Hvis det er for mange fiender på vei, vil jeg faktisk ikke kunne nå spilleren før fiender flytter eller spilleren beveger seg.
Når spilleren er i min "angrep" -radius (omtrent det maksimale angrepsområdet) spør spilleren om jeg har lov til å angripe. Hvis så, legg meg til listen over nåværende angripere på spillerobjektet. (Se SwordzPlayer.cs.)
De maksimalt tillatt antall samtidige angripere (simultaneousAttackers
i SwordzPlayer.cs) er avgjørende for å balansere kampsirkelen din. Et høyere tall gir en eksponensiell økning i press. I eksempeldemoen har jeg det satt til 2
; mindre tøffe og flere "kinematiske" spill satt det på 1
. Hvis du setter dette tallet for høyt, beseirer du sirkelens formål, fordi store grupper av fiender blir utilgjengelige eller kan bare beseires med uinteressant poke-and-run taktikk.
Av tilsvarende betydning er fiende angrep rate (attackRate
i EnemyMob.cs). Dette er ikke den raskeste mulige angrepstakten til fienden, men hvor ofte vil de velge å angripe når gitt tillatelse. Som du forventer, øker et lavere tall press, men du bør vanligvis ha dette til flere ganger høyere enn den virkelige angrepstakten. Du kan gjøre denne satsen litt mer uforutsigbar (og dermed mengden av press litt mindre forutsigbar) ved å øke attackRateFluctuation
, som vil øke eller redusere angrepshastigheten etter hvert angrep.
Ved å bruke dette systemet har du de grunnleggende måtene å skape den illusjonen av kraft som gjør det mye morsomt for spillerne dine å kjempe mange fiender samtidig.
Det er mange mindre endringer og tillegg du kan gjøre for kamp inne i sirkelen, for å være enda mer interessant:
Så få de kreative juicer flyter! Dette er bare begynnelsen: gjør kampsirkelen til en viktig del av spillet ditt, og lag din egen versjon av sirkelen som passer godt med din spill.