‫Hallo en welkom.
‫In deze lezing gaan we kijken naar het hebben van een keuze in onze gedragsbomen, zodat ik een vijand naar
‫me toe kan laten rennen en als hij me uit het oog verliest, komt hij naar mijn laatst bekende locatie en doet in feite
‫twee gedragingen, een achtervolging en dan Ik onderzoek gedrag.
‫Laten we erin duiken en kijken hoe dat haalbaar is.
‫Gedragsbomen gebruiken.
‫Dus hoewel dit patrouillegedrag erg leerzaam is, is het niet echt het soort gedrag dat we
‫willen implementeren.
‫Wat we liever hebben, is iets in de trant van.
‫Als we de speler kunnen zien, gaan we zo dicht mogelijk naar hem toe.
‫En wanneer de speler uit het zicht verdwijnt, proberen we naar de laatst bekende locatie van de speler te gaan om ze
‫te vinden.
‫En als we die optie eenmaal hebben uitgeput, gaan we misschien terug naar een andere locatie, of
‫misschien blijven we daar voorlopig.
‫Dus hoe kunnen we dit bereiken?
‫Op dit moment kunnen we dit niet bereiken met een reeks acties.
‫We moeten een keuze maken op basis van de gegevens die we beschikbaar hebben.
‫We moeten kiezen tussen of we de speler kunnen zien of niet, of we een laatst
‫bekende spelerlocatie hebben of niet, dat soort dingen.
‫Om dit te doen, hebben we een nieuw type knooppunt in de gedragsboom nodig, een selectornotitie genaamd.
‫Dus als we met de rechtermuisknop klikken en naar onze composieten kijken, is een van de opties daar de selector.
‫Nu loopt de selector in tegenstelling tot de reeks als volgt.
‫Als je een heleboel taken onder de selector hebt, wordt deze uitgevoerd totdat de eerste slaagt.
‫En eigenlijk verwacht het dat ze allemaal zullen falen totdat een van hen slaagt.
‫Nu deed de reeks het tegenovergestelde.
‫Het loopt ze allemaal totdat een van hen faalt.
‫Dus waarom is dat handig?
‫Waarom is het handig dat de selector er een uitvoert totdat een van hen slaagt?
‫Omdat we eigenlijk willen dat het de eerste optie kiest die haalbaar is.
‫De manier waarop we dit gaan doen, is niet door taken onder de selector uit te voeren, maar door
‫reeksen onder de selector uit te voeren.
‫Dus op het hoofdniveau gaan we een selectienotitie maken.
‫En daaronder, laten we deze reeks opzij schuiven en andere reeksen maken.
‫We gaan hier één reeks hebben.
‫En wat we kunnen doen, is dat we de reeks daadwerkelijk kunnen hernoemen van reeks naar zoiets als Chase.
‫En dan kunnen we hier nog een reeks toevoegen, die in de lijn van onderzoek zal zijn.
‫En dit zijn in feite onze twee gedragingen waaruit we willen kunnen kiezen.
‫En om ze te laten mislukken, kunnen we dingen toevoegen aan knooppunten die decorateurs worden genoemd.
‫Dus als je met de rechtermuisknop op een knooppunt klikt en decorateur toevoegt, kun je hier zien dat er een heleboel opties zijn.
‫En ze veranderen in feite de manier waarop dit knooppunt werkt.
‫Dan kunnen ze dat op verschillende manieren doen.
‫We hebben bijvoorbeeld deze voorwaardelijke lus waarmee je alle acties in de reeks opnieuw kunt doorlopen,
‫zo vaak als deze voorwaardelijke lus correct is.
‫We hebben hier andere dingen, zoals een codecontrole, die gaat over zichtbaarheid en andere mooie dingen.
‫We hebben gewoon een pure lus.
‫We hebben een tijdslimiet.
‫Dus dit kan alleen, we kunnen maar een bepaalde tijd in deze reeks blijven.
‫In principe veel dingen die het gedrag van deze reeks wijzigen.
‫Maar degene waar we in geïnteresseerd zijn, is het schoolbord, omdat dit een schoolbordconditie is.
‫En zoals je kunt zien aan het schrift eronder, is de standaard iets in de trant van:
‫is deze zelfhandeling ingesteld?
‫En als dit niet is ingesteld, dan zal automatisch dit knooppunt en alles eronder falen, wat betekent
‫dat onze selector naar optie twee gaat, namelijk onderzoeken.
‫Dus in dit geval willen we dit eigenlijk veranderen.
‫We willen veranderen hoe dit werkt.
‫Dus onze spelerslocatie, we willen dat deze zodanig is dat deze alleen wordt ingesteld wanneer de speler zichtbaar is.
‫En dan willen we hier weer een nieuwe variabele toevoegen, een vector die de laatst bekende spelerlocatie zal zijn
‫en de laatst bekende spelerlocatie wanneer de speler zichtbaar is, dezelfde zal zijn.
‫Maar zodra de speler onzichtbaar wordt, wordt de locatie van de speler uitgeschakeld.
‫En de laatst bekende spelerslocatie is waar we heen willen.
‫We kunnen dit dus doen door naar onze Blackboard Base-voorwaarde te gaan en deze te wijzigen in de
‫vraag Ja is ingesteld.
‫Maar het ding dat we willen zijn, is de locatie van de speler.
‫Dus als de speellocatie is ingesteld, dan gaan we achtervolgen en we gaan Chase geven door
‫eigenlijk gewoon een verplaatsing te doen naar en we gaan naar de spelerlocatie zoals.
‫Dus nu doen we niet veel anders onder de volgorde.
‫Dus in feite zou je deze schoolbordconditie ook direct in beweging kunnen zetten.
‫Maar omdat we misschien andere dingen willen doen, zoals fotograferen, laat ik het voor nu als een
‫reeks.
‫Dan hebben we dit onderzoek.
‫Investigate gaat in principe ook een zet doen, maar het gaat naar in
‫plaats van naar de spelerslocatie, maar naar de laatst bekende spelerlocatie.
‫En je kunt zien dat we daar geen voorwaarde voor hebben, want dit gaat niet door als deze voorwaarde faalt.
‫Een belangrijk ding om op te merken over deze blackboard-voorwaarden is dat we dat standaard niet opnieuw gaan
‫evalueren als we de beslissing hebben genomen om dit knooppunt uit te voeren.
‫Dus als we om de een of andere reden de speler uit het oog verliezen terwijl we naar de locatie van die speler
‫verhuizen, blijven we proberen daar te komen.
‫Dus als we de uitvoering van deze notitie willen kunnen afbreken, dan is daar een optie voor.
‫Als je naar de flow control gaat, zijn er waarnemers waarnemers en daaronder.
‫Observer breekt af op het moment ingesteld op geen.
‫Maar u kunt kiezen uit een aantal opties.
‫Je kunt het zelf instellen.
‫Dus dit wil zeggen dat als deze voorwaarde plotseling onwaar wordt, stop dan met wat je ook doet en je
‫selector opnieuw evalueert en kijk.
‫Misschien moeten we nu de onderzoeksnota doen.
‫De andere optie hier heeft een lagere prioriteit en je kunt zien dat het is veranderd wat hier is gemarkeerd.
‫Het zegt dat als deze schoolbordvoorwaarde plotseling waar wordt, stop met wat we verder aan het doen waren en
‫begin met het uitvoeren van deze achtervolgingsvoorwaarde.
‫En dan is de laatste optie beide.
‫En dit is degene die we willen.
‫Kortom, het zegt dat deze op schoolbord gebaseerde voorwaarde, als het waar wordt, we de reeks onmiddellijk beginnen
‫uit te voeren.
‫Als het onwaar wordt, stoppen we onmiddellijk met het uitvoeren ervan of stoppen we met het uitvoeren van wat er nog meer aan de hand was.
‫We willen eigenlijk altijd het pad volgen dat wordt bepaald door deze schoolbordconditie.
‫Dus hopelijk is het logisch dat de waarnemersrapporten dingen in actie stoppen, anders zal het wachten tot
‫de actie is voltooid voordat het opnieuw wordt geëvalueerd.
‫Dus echt, nu willen we doorgaan en onze laatst bekende locatie en speellocatie implementeren, want als we op dit moment
‫overgaan naar onze C++ en onszelf een beetje meer ruimte geven, dan kun je zien dat we
‫dit alleen instellen speellocatie in Start Play.
‫In het ideale geval zouden we dit elke keer doen als we een zichtlijn hebben naar onze spelerspool, en
‫dus kunnen we hier onze zichtlijncode verwijderen.
‫En we willen waarschijnlijk ook de else-code verwijderen.
‫Maar in dit geval gaan we de focus niet opruimen en de beweging direct stoppen.
‫Ik kan doorgaan en deze volledig verwijderen omdat.
‫Zo doen we het momenteel niet.
‫In plaats daarvan, wat we willen doen, als ik de code verwijder, is dat we hier de locatie van de speler willen
‫instellen.
‫Ook willen we daar de laatst bekende locatie neerzetten.
‫En anders willen we de locatie van de speler wissen.
‫Om dat te doen, hebben we een functie tot onze beschikking, die in plaats van de ingestelde waarde
‫als vector is, als we doorgaan en onze schoolbordcomponent dot h openen, is er een duidelijke waarde.
‫En dit heeft alleen de f-naam, hoeft geen type of iets anders te zijn, of omdat we gewoon
‫volledig wissen wat er in die variabele stond.
‫Dus hier heb ik een uitdaging voor je om ons vinkje in te vullen.
‫Stel de twee variabelen in bij zichtlijn.
‫Vul in principe dit eerste deel van de F-instructie in en wis vervolgens de spelerslocatie wanneer we de else
‫hebben.
‫Dus als we het zicht verliezen, hebben we geen speellocatie meer.
‫Verminder de snelheid van de vijand die in de wereld is, zodat je gemakkelijker bij hem weg kunt komen.
‫En controleer dan de functionaliteit, controleer of je je achter een hoek kunt verstoppen en of hij naar de laatst bekende locatie
‫gaat om je te proberen te vinden.
‫Pauzeer de video en probeer het eens.
‫Oké.
‫Welkom terug.
‫Dus laten we dit een kans geven.
‫Allereerst stellen we de speellocatie in.
‫Ik ga dat uit het begin van het spel halen en in plaats daarvan hierheen verplaatsen.
‫Dus als we de spelerslocatie gaan instellen, moeten we de speler a hier krijgen en opnieuw nemen.
‫Dus ik zal die regel verwijderen.
‫En dan doen we precies hetzelfde, precies dezelfde regel code voor onze laatst bekende spelerslocatie
‫hier.
‫Dus laten we naar ons schoolbord gaan en ervoor zorgen dat we het kopiëren zodat we precies dezelfde naam krijgen en
‫dan willen we gewoon duidelijk maken dat het laatste is om onze spelerslocatie hier te wissen.
‫Dus het wordt een duidelijke waarde en het zal deze tekstspelerlocatie nemen als de waarde die we aan
‫het einde proberen te wissen.
‫En we kunnen doorgaan en compileren en kijken of dit werkt.
‫Terwijl Compile succesvol was.
‫Het andere dat ik zei om het debuggen gemakkelijker te maken, was om de vijand te
‫selecteren en we kunnen hun snelheid veranderen door naar hun bewegingscomponenten te gaan en de lopende en hun snelheid te vinden.
‫Dus de maximale loopsnelheid is hier 600.
‫Laten we het op 400 zetten, zodat we er gemakkelijk vanaf kunnen komen.
‫Ze gaan een beetje langzaam lopen en gaan spelen.
‫Ze lopen langzaam naar een.
‫We kunnen weglopen.
‫We verschuilen ons achter een hoek en daar gaan ze.
‫Kom ons elke keer opzoeken.
‫Maar hopelijk kunnen ze ons niet vinden als we ons achter twee hoeken verstoppen.
‫Dus ik verstop me daar, verberg me hier, verberg me hier.
‫En hij gaat op onderzoek uit op de laatst bekende locatie, zie je, hij heeft net zijn
‫hoofd om de hoek gestoken, maar dan zit hij daar vast omdat hij niet weet wat hij moet doen.
‫En als we naar onze gedragsboom zouden gaan kijken en dit aan de ene kant en het spel aan de andere kant
‫zouden leggen en mezelf een beetje ruimte zouden geven.
‫Als we dan naar de gedragsboom kijken, kunnen we zien dat het hier een beetje aan het swingen is,
‫omdat het geen van beide kan.
‫Het probeert te verhuizen naar de laatst bekende locatie en dat lukt.
‫Het loopt hier dus een beetje vast.
‫Maar als ik in zicht kom, zie je dat hij naar me toe beweegt.
‫Als hij mij uit het oog verliest, gaat hij over naar de onderzoekstoestand.
‫Dus uit het oog verliezen.
‫Hij gaat op onderzoek.
‫En dan komt hij en ziet me en dan gaat hij weer achter me aan.
‫Dus dit gedrag werkt echt.
‫Nu kunnen we een keuze maken tussen proberen te jagen en proberen te onderzoeken op basis van dit
‫schoolbordgedrag.
‫Laten we de naam van dit schoolbord veranderen in gedrag hier om een vraagteken te kunnen zien spelen.
‫Dus dat zal veel gemakkelijker te lezen zijn.
‫Nu hebben we deze selector die het spel kan zien en dan moeten we achtervolgen, anders moeten we
‫het onderzoeken en we kunnen deze reeks hier verwijderen omdat die niet meer in gebruik is.
‫Dus hopelijk heb je nu een beetje een beter begrip van hoe gedragsbomen aan elkaar kunnen
‫worden gekoppeld om keuze en volgorde te creëren en veel taken samen te voegen om meer complex gedrag heel gemakkelijk te maken.
‫In de volgende lezing gaan we kijken hoe we onze eigen aangepaste taken in C++ kunnen maken,
‫zodat we wat schietactie kunnen krijgen.
‫Ik zie je in de volgende video.