Styrbeteenden syftar till att hjälpa autonoma karaktärer att flytta på ett realistiskt sätt, med hjälp av enkla krafter som kombineras för att producera livliknande improvisationsnavigering runt karaktärernas miljö. I denna handledning kommer jag att täcka den grundläggande teorin bakom söka styrning beteende, liksom dess genomförande.
Idéerna bakom dessa beteenden föreslogs av Craig W. Reynolds; De bygger inte på komplexa strategier som inbegriper vägplanering eller globala beräkningar utan använder istället lokal information, såsom granners styrkor. Detta gör dem enkla att förstå och genomföra, men kan fortfarande producera mycket komplexa rörelsemönster.
Notera: Även om denna handledning skrivs med AS3 och Flash, borde du kunna använda samma tekniker och begrepp i nästan vilken spelutvecklingsmiljö som helst. Du måste ha en grundläggande förståelse för matematiska vektorer.
Genomförandet av alla krafter som är inblandade i att styra beteenden kan uppnås med hjälp av matematiska vektorer. Eftersom dessa krafter kommer att påverka karaktärens hastighet och position, är det ett bra sätt att använda vektorer för att representera dem också.
Även om en vektor har a riktning, det kommer att ignoreras när det är relaterat till positionen (låt oss anta att positionsvektorn pekar på karaktärens aktuella position).
Figuren ovan representerar ett tecken placerat vid (x, y)
med en hastighet (a, b)
. Förflyttningen beräknas med hjälp av Euler integration:
position = position + hastighet
Riktningsvektorns riktning kommer att styra var karaktären är på väg medan dess längd (eller storlek) kommer att styra hur mycket den ska flytta varje ram. Ju större längd desto snabbare flyttar karaktären. Hastighetsvektorn kan trunkeras för att säkerställa att den inte kommer att vara större än ett visst värde, vanligtvis maxhastighet. Nedan är ett test som visar att tillvägagångssättet.
Den röda torget rör sig mot ett mål (muspekaren). Detta rörelsemönster illustrerar söka beteende utan alla styrkor som tillämpas hittills. Den gröna linjen representerar hastighetsvektorn, beräknad enligt följande:
hastighet = normalisera (målposition) * max_velocity
Det är viktigt att märka att utan styrkraften beskriver karaktären raka vägar och det ändras omedelbart riktningen när målet rör sig, vilket gör en abrupt övergång mellan den aktuella vägen och den nya.
Om det bara fanns den aktuella hastighetskraften, följde karaktären en rak linje definierad av riktningen för den vektorn. Ett av tankarna på styrningsbeteenden är att påverka karaktärens rörelse genom att lägga till krafter (kallas styrkor). Beroende på dessa krafter kommer karaktären att röra sig i en eller annan riktning.
För sökbeteendet gör tillägget av styrkrafter till karaktären varje ram det smidigt att justera hastigheten, för att undvika plötsliga ruttbyten. Om målet rör sig kommer tecknet att gradvis ändra sin hastighetsvektor, försöker nå målet på sin nya plats.
Sökbeteendet innefattar två krafter: önskad hastighet och styrning:
De önskad hastighet är en kraft som styr karaktären mot sitt mål med hjälp av den kortaste vägen möjligt (rak linje mellan dem - tidigare var detta den enda kraft som verkar på karaktären). De styrning kraft är resultatet av den önskade hastigheten subtraherad av strömhastigheten och den trycker även karaktären mot målet.
Dessa krafter beräknas enligt följande:
desired_velocity = normalisera (målposition) * max_velocity styrning = önskad hastighet - hastighet
När styrkraften har beräknats måste den läggas till karaktären (den kommer att läggas till hastighetskraften). Tillägget av styrkraften till hastigheten varje ram gör att teckenet smidigt överger sin gamla raka rutt och leder mot målet, som beskriver en sök väg (orange kurva i figuren nedan):
Tillägget av dessa krafter och sluthastigheten / positionberäkningen är:
styrning = stympa (styrning, max_force) styrning = styrning / masshastighet = trunkera (hastighet + styrning, max_hastighet) position = läge + hastighet
Styrkraften är avkortad för att säkerställa att den inte överstiger mängden tillåtna krafter karaktären kan hantera. Även styrkraften är uppdelad av teckenmassan, vilket ger olika rörelseshastigheter för olika viktiga tecken. Nedan är ett test som visar sökbeteendet med alla krafter som tillämpas:
Varje gång målet rör sig, är varje karaktär önskad hastighet vektorn ändras därefter. De hastighet vektorn tar dock lite tid att ändra och börja peka på målet igen. Resultatet är en jämn rörelseövergång.
Styrningsbeteenden är bra för att skapa realistiska rörelsemönster. Huvudidén är att använda lokal information för att beräkna och tillämpa krafter för att skapa beteenden. Även om beräkningen är enkel att genomföra, kan den fortfarande producera mycket komplexa resultat.
Denna handledning beskrev grunderna i styrningsbeteenden och förklara sökbeteendet. Under de kommande inläggen lär vi oss mer om beteende. Kolla in nästa inlägg: Flee and Arrival.