‫Cześć i witaj.
‫W tym wykładzie będziemy przyglądać się możliwościom wyboru w naszych drzewach zachowań, tak aby wróg mógł
‫rzucić się w moją stronę, a jeśli straci mnie z oczu, przybędzie do mojej ostatniej znanej lokalizacji, wykonując zasadniczo
‫dwa zachowania w pościgu, a następnie Badam zachowanie.
‫Zanurzmy się i zobaczmy, jak można to osiągnąć.
‫Korzystanie z drzew behawioralnych.
‫Więc chociaż to zachowanie patrolowania jest bardzo pouczające, tak naprawdę nie jest to zachowanie, które chcemy
‫wdrożyć.
‫To, co wolelibyśmy mieć, to coś w następujący sposób.
‫Kiedy widzimy gracza, podchodzimy i zbliżamy się do niego tak blisko, jak to tylko możliwe.
‫A kiedy gracz zniknie z pola widzenia, próbujemy przenieść się do ostatniej znanej lokalizacji gracza, aby go
‫znaleźć.
‫A jak już wykorzystamy tę opcję, może wracamy w inne miejsce, a może po prostu
‫zostajemy tam na razie.
‫Jak więc możemy to osiągnąć?
‫Cóż, w tej chwili nie mamy możliwości osiągnięcia tego za pomocą sekwencji działań.
‫Musimy dokonać wyboru na podstawie dostępnych nam danych.
‫Musimy wybrać, czy widzimy gracza, czy nie, czy mamy ostatnią znaną lokalizację
‫gracza, czy nie, tego typu rzeczy.
‫Aby to zrobić, potrzebujemy nowego typu węzła w drzewie zachowań, zwanego notatką selektora.
‫Jeśli więc klikniemy prawym przyciskiem myszy i spojrzymy na nasze kompozyty, jedną z opcji jest selektor.
‫Teraz selektor, w przeciwieństwie do sekwencji, działa w ten sposób.
‫Jeśli masz kilka zadań pod selektorem, będzie on działał, dopóki pierwsze się nie powiedzie.
‫I w zasadzie oczekuje się, że wszyscy poniosą porażkę, dopóki jeden z nich nie odniesie sukcesu.
‫Teraz sekwencja była odwrotna.
‫Uruchamia je wszystkie, dopóki jeden z nich nie ulegnie awarii.
‫Dlaczego to jest przydatne?
‫Dlaczego przydatne jest, aby selektor uruchamiał jeden z nich, dopóki jeden z nich się nie powiedzie?
‫Ponieważ zasadniczo chcemy, aby wybrał pierwszą wykonalną opcję.
‫Teraz zamierzamy to zrobić nie przez faktyczne uruchamianie zadań pod selektorem, ale
‫uruchamianie sekwencji pod selektorem.
‫Tak więc na poziomie głównym zrobimy notatkę selektora.
‫A poniżej, odsuńmy tę sekwencję na bok i stwórzmy inne sekwencje.
‫Będziemy mieli tutaj jedną sekwencję.
‫Możemy zmienić nazwę sekwencji z sekwencji na coś w rodzaju Chase.
‫A potem możemy dodać tutaj inną sekwencję, która będzie przebiegać wzdłuż linii badania.
‫I to są w zasadzie nasze dwa zachowania, między którymi chcemy mieć możliwość wyboru.
‫A żeby je zawiodły, możemy dodawać elementy do węzłów zwanych dekoratorami.
‫Więc jeśli klikniesz prawym przyciskiem myszy węzeł i przejdziesz do dodawania dekoratora, zobaczysz tutaj, że jest tu kilka opcji.
‫I zasadniczo zmieniają sposób działania tego węzła.
‫Wtedy mogą to zrobić na wiele sposobów.
‫Na przykład mamy tę pętlę warunkową, która pozwala na powtarzanie wszystkich akcji w sekwencji
‫tyle razy, ile razy ten warunek jest poprawny.
‫Mamy tu inne rzeczy, takie jak sprawdzanie kodu, które dotyczy widoczności i inne takie cudowne rzeczy.
‫Mamy tylko czystą pętlę.
‫Mamy limit czasu.
‫Więc to może tylko my możemy pozostać w tej sekwencji tylko przez pewien czas.
‫W zasadzie wiele rzeczy, które modyfikują zachowanie tej sekwencji.
‫Ale ta, która nas interesuje, to tablica, ponieważ jest to stan tablicy.
‫I jak widać z napisu pod nim, domyślnie jest to coś w stylu czy to
‫samoczynność jest ustawiona?
‫A jeśli to nie jest ustawione, to automatycznie ten węzeł i wszystko pod nim zawiedzie, co oznacza,
‫że nasz selektor przejdzie do opcji drugiej, czyli zbadania.
‫Więc w tym przypadku chcemy to zmienić.
‫Chcemy zmienić sposób, w jaki to działa.
‫Więc nasza lokalizacja gracza, chcemy, aby była taka, aby była ustawiana tylko wtedy, gdy gracz jest widoczny.
‫A potem znowu chcemy dodać nową zmienną, wektor, który będzie ostatnią znaną lokalizacją gracza i
‫ostatnią znaną lokalizacją gracza, gdy gracz jest widoczny, będzie taki sam.
‫Ale gdy gracz stanie się niewidzialny, lokalizacja gracza zostanie rozbrojona.
‫A ostatnia znana lokalizacja gracza to miejsce, do którego będziemy chcieli się udać.
‫Możemy to zrobić, przechodząc do naszego warunku Blackboard Base i po prostu zmieniając go na zapytanie
‫na Tak, jest ustawione.
‫Ale to, czym chcemy być, to lokalizacja gracza.
‫Więc jeśli lokalizacja gry jest ustawiona, wtedy będziemy ścigać i dawać Chase'owi, wykonując w
‫zasadzie tylko ruch do i przeniesiemy się do lokalizacji gracza, tak jak.
‫Więc teraz nie robimy wiele więcej w ramach sekwencji.
‫Tak więc w rzeczywistości możesz również umieścić ten warunek tablicy bezpośrednio w ruchu.
‫Ale ponieważ możemy chcieć robić inne rzeczy, takie jak strzelanie, na razie zostawię to jako
‫sekwencję.
‫Następnie mamy to śledztwo.
‫Zbadanie zasadniczo również wykona ruch, ale zamiast do lokalizacji gracza,
‫przeniesie się do ostatniej znanej lokalizacji gracza.
‫I widzicie, że nie mamy takiego warunku, ponieważ to się nie powiedzie, jeśli ten warunek zawiedzie.
‫Jedną ważną rzeczą, o której należy pamiętać w tych warunkach tablicy, jest to, że domyślnie po
‫podjęciu decyzji o rozpoczęciu wykonywania tego węzła nie będziemy tego ponownie oceniać.
‫Więc jeśli z jakiegoś powodu stracimy z oczu gracza, gdy przenosimy się do jego lokalizacji, będziemy
‫dalej próbować się tam dostać.
‫Więc jeśli chcielibyśmy mieć możliwość przerwania wykonywania tej notatki, jest na to opcja.
‫Jeśli przejdziesz do kontroli przepływu, tam są obserwatorzy powiadamiania i są pod nimi.
‫Obserwator przerywa w tej chwili ustawiony na brak.
‫Ale możesz wybrać jedną z kilku opcji.
‫Możesz ustawić to na siebie.
‫Więc to oznacza, że jeśli ten warunek nagle stanie się fałszywy, to przestań cokolwiek robisz, ponownie oceń
‫swój selektor i zobacz.
‫Może teraz musimy zrobić notatkę z dochodzenia.
‫Druga opcja tutaj ma niższy priorytet i widać, że zmieniło się to, co jest tutaj podświetlone.
‫Mówi, że jeśli nagle ten warunek tablicy stanie się spełniony, przerwij cokolwiek innego, co robiliśmy
‫i zacznij wykonywać ten warunek pościgu.
‫A potem ostateczna opcja to jedno i drugie.
‫I to jest ten, którego chcemy.
‫Zasadniczo mówi, że ten warunek oparty na tablicy, jeśli stanie się spełniony, natychmiast zaczniemy
‫wykonywać sekwencję.
‫Jeśli stanie się fałszywy, natychmiast przestajemy go wykonywać lub przestajemy wykonywać cokolwiek innego, co się działo.
‫Po prostu chcemy zawsze iść i robić to, co jest dyktowane przez ten stan tablicy.
‫Miejmy więc nadzieję, że ma to sens, że raporty obserwatorów zatrzymują rzeczy w działaniu, w przeciwnym razie
‫poczeka, aż akcja się zakończy, zanim dokona ponownej oceny.
‫Więc naprawdę, teraz chcemy iść dalej i zaimplementować naszą ostatnią znaną lokalizację i lokalizację odtwarzania, ponieważ w tej chwili,
‫jeśli przejdziemy do naszego C++ i damy sobie trochę więcej miejsca, wtedy widać, że tylko to
‫ustawiamy miejsce gry w Rozpocznij grę.
‫Najlepiej byłoby, gdybyśmy robili to za każdym razem, gdy nasza pula graczy jest w zasięgu wzroku, więc
‫możemy odkomentować tutaj nasz kod linii widzenia.
‫I prawdopodobnie chcemy również odkomentować kod else.
‫Ale w tym przypadku nie zamierzamy bezpośrednio usuwać skupienia i zatrzymywać ruchu.
‫Mogę iść dalej i całkowicie je usunąć, ponieważ.
‫W tej chwili nie tak robimy.
‫Zamiast tego, co chcemy zrobić, jeśli usunę kod, to chcemy być tutaj, ustawiając lokalizację
‫gracza.
‫Chcemy również ustawić tam ostatnią znaną lokalizację.
‫A w innym chcemy wyczyścić lokalizację gracza.
‫Teraz, aby to zrobić, mamy dostępną dla nas funkcję, która zamiast ustawionej wartości jako wektora,
‫jeśli pójdziemy dalej i otworzymy nasz składnik tablicy dot h, jest wyraźna wartość.
‫A to po prostu przyjmuje nazwę f, nie musi brać typu ani niczego, albo ponieważ po prostu
‫całkowicie wymazujemy to, co było w tej zmiennej.
‫Więc tutaj mam dla ciebie wyzwanie, abyś wypełnił nasz haczyk.
‫Ustaw dwie zmienne, gdy linia wzroku.
‫Zasadniczo wypełnij pierwszą część instrukcji F, a następnie wyczyść lokalizację gracza, gdy mamy inne.
‫Więc kiedy tracimy linię wzroku, nie mamy już miejsca do zabawy.
‫Zmniejsz prędkość wroga znajdującego się w świecie, aby łatwiej mu się oddalić.
‫A potem sprawdź funkcjonalność, sprawdź, czy jesteś w stanie schować się za rogiem i czy udaje się do ostatniej
‫znanej lokalizacji, aby spróbować Cię znaleźć.
‫Zatrzymaj wideo i spróbuj.
‫Dobra.
‫Witamy spowrotem.
‫Więc spróbujmy.
‫Przede wszystkim ustalamy lokalizację gry.
‫Przeniosę to z początku gry i przeniosę tutaj.
‫Więc zamierzając ustawić lokalizację gracza na, musimy wprowadzić gracza tutaj i wziąć ponownie.
‫Więc odkomentuję tę linię.
‫A potem robimy dokładnie to samo, dokładnie ten sam wiersz kodu dla naszej ostatniej znanej lokalizacji
‫gracza tutaj.
‫Przejdźmy więc do naszej tablicy i po prostu upewnijmy się, że ją skopiowaliśmy, aby otrzymać dokładnie tę samą nazwę,
‫a potem po prostu chcemy wyczyścić, że ostatnią rzeczą jest wyczyszczenie lokalizacji naszego gracza tutaj.
‫Tak więc będzie to wartość wyczyszczenia i przyjmie tę lokalizację odtwarzacza tekstu jako wartość, którą
‫próbujemy wyczyścić na końcu.
‫I możemy iść dalej, skompilować i zobaczyć, czy to zadziała.
‫Kompilacja zakończyła się sukcesem.
‫Inną rzeczą, którą powiedziałem, aby ułatwić debugowanie, było wybranie wroga i
‫możemy zmienić jego prędkość, schodząc do jego elementów ruchu, odnajdując chód i znajdując jego prędkość.
‫Tak więc maksymalna prędkość chodzenia wynosi tutaj 600.
‫Ustawmy go na 400, abyśmy mogli łatwo od nich uciec.
‫Będą chodzić trochę wolno, pójdą dalej i będą się bawić.
‫Idą powoli w kierunku.
‫Możemy uciec.
‫Chowamy się za rogiem i tu idą.
‫Przyjdź za każdym razem nas szukać.
‫Ale miejmy nadzieję, że jeśli schowamy się za dwoma rogami, nie będą w stanie nas znaleźć.
‫Więc chowam się tam, chowam się tutaj, chowam się tutaj.
‫I zamierza zbadać ostatnią znaną lokalizację, widzicie, właśnie wystawił głowę
‫za róg, ale potem utknął tam, bo nie wie, co robić.
‫A gdybyśmy mieli spojrzeć na nasze drzewo zachowań i po prostu odłożyć to na jedną stronę, a grę
‫na drugą i dać sobie trochę miejsca.
‫Następnie, jeśli przyjrzymy się drzewu zachowań, zobaczymy, że tutaj trochę się kręci, ponieważ nie
‫może zrobić żadnego z nich.
‫Próbuje przenieść się do ostatniej znanej lokalizacji, która mu się udaje.
‫Więc trochę tu utknęło.
‫Ale jeśli wejdę w pole widzenia, widać, że zbliża się do mnie.
‫Jeśli straci mnie z oczu, przechodzi do stanu śledztwa.
‫Więc trać z oczu.
‫Zamierza zbadać sprawę.
‫A potem przychodzi i widzi mnie, a potem wraca do mnie.
‫Więc to zachowanie faktycznie działa.
‫Teraz możemy dokonać wyboru między próbą ścigania a próbą zbadania na podstawie tego zachowania tablicy.
‫Zmieńmy tylko nazwę tej tablicy na zachowanie tutaj, aby zobaczyć, jak gra w znak zapytania.
‫Więc będzie to o wiele łatwiejsze do odczytania.
‫Teraz mamy ten selektor, który może zobaczyć, jak go zagrać, a następnie powinniśmy go ścigać, w
‫przeciwnym razie powinniśmy zbadać i usunąć tę sekwencję tutaj, ponieważ nie jest już używana.
‫Miejmy nadzieję, że teraz lepiej rozumiesz, w jaki sposób drzewa zachowań mogą być ze
‫sobą połączone, aby tworzyć wybór i kolejność oraz łączyć wiele zadań, aby naprawdę łatwo tworzyć bardziej złożone zachowania.
‫W następnym wykładzie przyjrzymy się, jak możemy tworzyć własne niestandardowe zadania w C++, aby
‫uzyskać trochę akcji strzeleckiej.
‫Do zobaczenia w następnym filmie.