Styringsadferdene tar sikte på å hjelpe autonome tegn å bevege seg på en realistisk måte, ved å bruke enkle krefter som kombineres for å produsere livslignende improvisasjonsnavigering rundt karakterenes miljø. I denne opplæringen vil jeg dekke grunnleggende teori bak søke styringsadferd, samt implementering.
Ideene bak disse oppføringene ble foreslått av Craig W. Reynolds; De er ikke basert på komplekse strategier som involverer baneplanlegging eller globale beregninger, men bruker i stedet lokal informasjon, som naboens styrker. Dette gjør dem enkle å forstå og implementere, men fremdeles i stand til å produsere svært komplekse bevegelsesmønstre.
Merk: Selv om denne opplæringen er skrevet med AS3 og Flash, bør du kunne bruke de samme teknikkene og konseptene i nesten hvilket som helst spillutviklingsmiljø. Du må ha en grunnleggende forståelse av matematiske vektorer.
Gjennomføringen av alle krefter involvert i styring av atferd kan oppnås ved hjelp av matematiske vektorer. Siden disse kreftene vil påvirke karakterens hastighet og posisjon, er det en god tilnærming til å bruke vektorer til å representere dem også.
Selv om en vektor har a retning, det vil bli ignorert når det er relatert til posisjon (la oss anta at posisjonsvektoren peker på tegnets nåværende posisjon).
Figuren over representerer et tegn plassert på (x, y)
med en hastighet (a, b)
. Bevegelsen er beregnet ved hjelp av Euler-integrasjon:
posisjon = posisjon + hastighet
Retningen av hastighetsvektoren vil styre hvor tegnet skal til, mens lengden (eller størrelsen) vil kontrollere hvor mye det vil bevege hver ramme. Jo større lengden, desto raskere flyttes tegnet. Hastighetsvektoren kan avkortes for å sikre at den ikke vil være større enn en bestemt verdi, vanligvis maksimal hastighet. Nedenfor er en test som viser denne tilnærmingen.
Det røde torget beveger seg mot et mål (musepekeren). Dette bevegelsesmønsteret illustrerer søke oppførsel uten noen styringskrefter blir brukt så langt. Den grønne linjen representerer hastighetsvektoren, beregnet som følger:
hastighet = normaliser (målposisjon) * max_velocity
Det er viktig å merke seg at uten styrestyrken beskriver tegnet rette ruter og det skifter øyeblikkelig retningen når målet beveger seg, noe som gjør en abrupt overgang mellom den nåværende ruten og den nye.
Hvis det bare var den involverte hastighetskraften, ville tegnet følge en rett linje definert av retningen til vektoren. En av ideene til styringsadferd er å påvirke karakterens bevegelse ved å legge til styrker (kalt styrkrefter). Avhengig av disse kreftene vil tegnet bevege seg i en eller annen retning.
For søksadferd, gir tillegget av styringskrefter til tegnet hver ramme det jevnt å justere hastigheten, og unngår plutselige ruteendringer. Hvis målet beveger seg, vil tegnet gradvis endre hastighetsvektoren, forsøker å nå målet på sitt nye sted.
Søkeadferden innebærer to krefter: ønsket hastighet og styring:
De ønsket hastighet er en kraft som styrer tegnet mot målet sitt ved å bruke den korteste banen mulig (rett linje mellom dem - tidligere var dette den eneste kraften som handler på tegnet). De styring kraft er resultatet av ønsket hastighet subtraheres av gjeldende hastighet og den skyver også tegnet mot målet.
Disse kreftene beregnes som følger:
desired_velocity = normaliser (målposisjon) * max_velocity styring = ønsket_velocity - hastighet
Etter at styrkraften er beregnet, må den legges til tegnet (den vil bli lagt til hastighetskraften). Tilsetningen av styrekraften til hastigheten hver ramme vil gjøre karakteren jevnt forlate sin gamle rette rute og hodet mot målet, og beskriver en søke vei (oransje kurve i figuren under):
Tilsetningen av disse kreftene og den endelige hastighets- / stillingsberegningen er:
styring = trunkering (styring, maks_force) styring = styring / massehastighet = trunkering (hastighet + styring, maks_speed) posisjon = posisjon + hastighet
Styrkraften er avkortet for å sikre at den ikke overskrider mengden tillatt krefter karakteren kan håndtere. Styrestyrken er også delt med tegnmassen, som gir forskjellige bevegelseshastigheter for forskjellige vektede tegn. Nedenfor er en test som viser søkeadferdene med alle påkrevde krefter:
Hver gang målet beveger seg, er hvert tegn ønsket hastighet vektor endres tilsvarende. De hastighet vektoren tar imidlertid litt tid å endre og begynne å peke på målet igjen. Resultatet er en jevn bevegelsesovergang.
Styringsadferdene er gode for å skape realistiske bevegelsesmønstre. Hovedideen er å bruke lokal informasjon til å beregne og anvende krefter for å skape atferd. Selv om beregningen er enkel å implementere, er den fortsatt i stand til å produsere svært komplekse resultater.
Denne opplæringen beskrev grunnleggende om styringsadferd, og forklarte søkegraden. I løpet av de neste innleggene lærer vi om mer oppførsel. Sjekk ut neste innlegg: Flee and Arrival.