﻿1
00:00:04,330 --> 00:00:05,170
‫Cześć i witaj.

2
00:00:05,170 --> 00:00:12,100
‫W tym wykładzie będziemy przyglądać się możliwościom wyboru w naszych drzewach zachowań, tak aby wróg mógł

3
00:00:12,100 --> 00:00:20,200
‫rzucić się w moją stronę, a jeśli straci mnie z oczu, przybędzie do mojej ostatniej znanej lokalizacji, wykonując zasadniczo

4
00:00:20,590 --> 00:00:24,190
‫dwa zachowania w pościgu, a następnie Badam zachowanie.

5
00:00:24,190 --> 00:00:26,050
‫Zanurzmy się i zobaczmy, jak można to osiągnąć.

6
00:00:26,050 --> 00:00:27,130
‫Korzystanie z drzew behawioralnych.

7
00:00:28,530 --> 00:00:34,530
‫Więc chociaż to zachowanie patrolowania jest bardzo pouczające, tak naprawdę nie jest to zachowanie, które chcemy

8
00:00:34,530 --> 00:00:35,280
‫wdrożyć.

9
00:00:35,790 --> 00:00:39,150
‫To, co wolelibyśmy mieć, to coś w następujący sposób.

10
00:00:39,330 --> 00:00:44,580
‫Kiedy widzimy gracza, podchodzimy i zbliżamy się do niego tak blisko, jak to tylko możliwe.

11
00:00:45,330 --> 00:00:51,840
‫A kiedy gracz zniknie z pola widzenia, próbujemy przenieść się do ostatniej znanej lokalizacji gracza, aby go

12
00:00:51,840 --> 00:00:52,500
‫znaleźć.

13
00:00:52,800 --> 00:00:58,410
‫A jak już wykorzystamy tę opcję, może wracamy w inne miejsce, a może po prostu

14
00:00:58,410 --> 00:01:00,150
‫zostajemy tam na razie.

15
00:01:00,930 --> 00:01:02,400
‫Jak więc możemy to osiągnąć?

16
00:01:02,430 --> 00:01:05,880
‫Cóż, w tej chwili nie mamy możliwości osiągnięcia tego za pomocą sekwencji działań.

17
00:01:05,880 --> 00:01:09,200
‫Musimy dokonać wyboru na podstawie dostępnych nam danych.

18
00:01:09,210 --> 00:01:15,210
‫Musimy wybrać, czy widzimy gracza, czy nie, czy mamy ostatnią znaną lokalizację

19
00:01:15,210 --> 00:01:18,450
‫gracza, czy nie, tego typu rzeczy.

20
00:01:18,870 --> 00:01:24,000
‫Aby to zrobić, potrzebujemy nowego typu węzła w drzewie zachowań, zwanego notatką selektora.

21
00:01:24,060 --> 00:01:29,070
‫Jeśli więc klikniemy prawym przyciskiem myszy i spojrzymy na nasze kompozyty, jedną z opcji jest selektor.

22
00:01:29,550 --> 00:01:33,090
‫Teraz selektor, w przeciwieństwie do sekwencji, działa w ten sposób.

23
00:01:33,480 --> 00:01:40,410
‫Jeśli masz kilka zadań pod selektorem, będzie on działał, dopóki pierwsze się nie powiedzie.

24
00:01:40,830 --> 00:01:45,150
‫I w zasadzie oczekuje się, że wszyscy poniosą porażkę, dopóki jeden z nich nie odniesie sukcesu.

25
00:01:45,780 --> 00:01:48,140
‫Teraz sekwencja była odwrotna.

26
00:01:48,150 --> 00:01:50,220
‫Uruchamia je wszystkie, dopóki jeden z nich nie ulegnie awarii.

27
00:01:50,730 --> 00:01:52,750
‫Dlaczego to jest przydatne?

28
00:01:52,800 --> 00:01:56,610
‫Dlaczego przydatne jest, aby selektor uruchamiał jeden z nich, dopóki jeden z nich się nie powiedzie?

29
00:01:56,610 --> 00:02:00,900
‫Ponieważ zasadniczo chcemy, aby wybrał pierwszą wykonalną opcję.

30
00:02:01,920 --> 00:02:06,780
‫Teraz zamierzamy to zrobić nie przez faktyczne uruchamianie zadań pod selektorem, ale

31
00:02:06,780 --> 00:02:08,910
‫uruchamianie sekwencji pod selektorem.

32
00:02:08,910 --> 00:02:12,120
‫Tak więc na poziomie głównym zrobimy notatkę selektora.

33
00:02:12,690 --> 00:02:16,920
‫A poniżej, odsuńmy tę sekwencję na bok i stwórzmy inne sekwencje.

34
00:02:17,250 --> 00:02:19,930
‫Będziemy mieli tutaj jedną sekwencję.

35
00:02:20,670 --> 00:02:26,640
‫Możemy zmienić nazwę sekwencji z sekwencji na coś w rodzaju Chase.

36
00:02:27,330 --> 00:02:35,010
‫A potem możemy dodać tutaj inną sekwencję, która będzie przebiegać wzdłuż linii badania.

37
00:02:36,050 --> 00:02:41,330
‫I to są w zasadzie nasze dwa zachowania, między którymi chcemy mieć możliwość wyboru.

38
00:02:42,260 --> 00:02:48,980
‫A żeby je zawiodły, możemy dodawać elementy do węzłów zwanych dekoratorami.

39
00:02:49,370 --> 00:02:54,890
‫Więc jeśli klikniesz prawym przyciskiem myszy węzeł i przejdziesz do dodawania dekoratora, zobaczysz tutaj, że jest tu kilka opcji.

40
00:02:55,460 --> 00:02:59,330
‫I zasadniczo zmieniają sposób działania tego węzła.

41
00:02:59,450 --> 00:03:00,890
‫Wtedy mogą to zrobić na wiele sposobów.

42
00:03:00,920 --> 00:03:05,810
‫Na przykład mamy tę pętlę warunkową, która pozwala na powtarzanie wszystkich akcji w sekwencji

43
00:03:05,810 --> 00:03:08,720
‫tyle razy, ile razy ten warunek jest poprawny.

44
00:03:09,200 --> 00:03:15,800
‫Mamy tu inne rzeczy, takie jak sprawdzanie kodu, które dotyczy widoczności i inne takie cudowne rzeczy.

45
00:03:15,800 --> 00:03:17,660
‫Mamy tylko czystą pętlę.

46
00:03:18,090 --> 00:03:19,350
‫Mamy limit czasu.

47
00:03:19,370 --> 00:03:23,240
‫Więc to może tylko my możemy pozostać w tej sekwencji tylko przez pewien czas.

48
00:03:23,540 --> 00:03:27,020
‫W zasadzie wiele rzeczy, które modyfikują zachowanie tej sekwencji.

49
00:03:27,290 --> 00:03:33,290
‫Ale ta, która nas interesuje, to tablica, ponieważ jest to stan tablicy.

50
00:03:33,290 --> 00:03:38,360
‫I jak widać z napisu pod nim, domyślnie jest to coś w stylu czy to

51
00:03:38,360 --> 00:03:39,710
‫samoczynność jest ustawiona?

52
00:03:40,250 --> 00:03:46,940
‫A jeśli to nie jest ustawione, to automatycznie ten węzeł i wszystko pod nim zawiedzie, co oznacza,

53
00:03:46,940 --> 00:03:50,810
‫że nasz selektor przejdzie do opcji drugiej, czyli zbadania.

54
00:03:51,290 --> 00:03:53,800
‫Więc w tym przypadku chcemy to zmienić.

55
00:03:53,810 --> 00:03:55,160
‫Chcemy zmienić sposób, w jaki to działa.

56
00:03:55,160 --> 00:04:02,120
‫Więc nasza lokalizacja gracza, chcemy, aby była taka, aby była ustawiana tylko wtedy, gdy gracz jest widoczny.

57
00:04:02,510 --> 00:04:09,980
‫A potem znowu chcemy dodać nową zmienną, wektor, który będzie ostatnią znaną lokalizacją gracza i

58
00:04:10,400 --> 00:04:16,010
‫ostatnią znaną lokalizacją gracza, gdy gracz jest widoczny, będzie taki sam.

59
00:04:16,490 --> 00:04:20,660
‫Ale gdy gracz stanie się niewidzialny, lokalizacja gracza zostanie rozbrojona.

60
00:04:21,080 --> 00:04:23,840
‫A ostatnia znana lokalizacja gracza to miejsce, do którego będziemy chcieli się udać.

61
00:04:24,620 --> 00:04:30,230
‫Możemy to zrobić, przechodząc do naszego warunku Blackboard Base i po prostu zmieniając go na zapytanie

62
00:04:30,230 --> 00:04:31,850
‫na Tak, jest ustawione.

63
00:04:32,300 --> 00:04:35,300
‫Ale to, czym chcemy być, to lokalizacja gracza.

64
00:04:35,300 --> 00:04:41,900
‫Więc jeśli lokalizacja gry jest ustawiona, wtedy będziemy ścigać i dawać Chase'owi, wykonując w

65
00:04:41,900 --> 00:04:47,960
‫zasadzie tylko ruch do i przeniesiemy się do lokalizacji gracza, tak jak.

66
00:04:47,960 --> 00:04:51,730
‫Więc teraz nie robimy wiele więcej w ramach sekwencji.

67
00:04:51,740 --> 00:04:57,240
‫Tak więc w rzeczywistości możesz również umieścić ten warunek tablicy bezpośrednio w ruchu.

68
00:04:57,680 --> 00:05:01,700
‫Ale ponieważ możemy chcieć robić inne rzeczy, takie jak strzelanie, na razie zostawię to jako

69
00:05:01,700 --> 00:05:02,150
‫sekwencję.

70
00:05:02,660 --> 00:05:04,010
‫Następnie mamy to śledztwo.

71
00:05:04,010 --> 00:05:10,430
‫Zbadanie zasadniczo również wykona ruch, ale zamiast do lokalizacji gracza,

72
00:05:10,460 --> 00:05:15,980
‫przeniesie się do ostatniej znanej lokalizacji gracza.

73
00:05:16,580 --> 00:05:22,730
‫I widzicie, że nie mamy takiego warunku, ponieważ to się nie powiedzie, jeśli ten warunek zawiedzie.

74
00:05:23,420 --> 00:05:29,210
‫Jedną ważną rzeczą, o której należy pamiętać w tych warunkach tablicy, jest to, że domyślnie po

75
00:05:29,210 --> 00:05:33,890
‫podjęciu decyzji o rozpoczęciu wykonywania tego węzła nie będziemy tego ponownie oceniać.

76
00:05:34,160 --> 00:05:39,770
‫Więc jeśli z jakiegoś powodu stracimy z oczu gracza, gdy przenosimy się do jego lokalizacji, będziemy

77
00:05:39,770 --> 00:05:41,570
‫dalej próbować się tam dostać.

78
00:05:42,080 --> 00:05:49,580
‫Więc jeśli chcielibyśmy mieć możliwość przerwania wykonywania tej notatki, jest na to opcja.

79
00:05:49,580 --> 00:05:53,720
‫Jeśli przejdziesz do kontroli przepływu, tam są obserwatorzy powiadamiania i są pod nimi.

80
00:05:53,720 --> 00:05:56,030
‫Obserwator przerywa w tej chwili ustawiony na brak.

81
00:05:56,600 --> 00:05:58,490
‫Ale możesz wybrać jedną z kilku opcji.

82
00:05:59,180 --> 00:06:00,590
‫Możesz ustawić to na siebie.

83
00:06:00,860 --> 00:06:07,790
‫Więc to oznacza, że jeśli ten warunek nagle stanie się fałszywy, to przestań cokolwiek robisz, ponownie oceń

84
00:06:07,790 --> 00:06:09,710
‫swój selektor i zobacz.

85
00:06:09,740 --> 00:06:12,050
‫Może teraz musimy zrobić notatkę z dochodzenia.

86
00:06:12,650 --> 00:06:18,470
‫Druga opcja tutaj ma niższy priorytet i widać, że zmieniło się to, co jest tutaj podświetlone.

87
00:06:18,470 --> 00:06:24,380
‫Mówi, że jeśli nagle ten warunek tablicy stanie się spełniony, przerwij cokolwiek innego, co robiliśmy

88
00:06:24,380 --> 00:06:26,790
‫i zacznij wykonywać ten warunek pościgu.

89
00:06:27,380 --> 00:06:29,630
‫A potem ostateczna opcja to jedno i drugie.

90
00:06:29,900 --> 00:06:31,050
‫I to jest ten, którego chcemy.

91
00:06:31,070 --> 00:06:37,160
‫Zasadniczo mówi, że ten warunek oparty na tablicy, jeśli stanie się spełniony, natychmiast zaczniemy

92
00:06:37,160 --> 00:06:38,480
‫wykonywać sekwencję.

93
00:06:38,690 --> 00:06:44,100
‫Jeśli stanie się fałszywy, natychmiast przestajemy go wykonywać lub przestajemy wykonywać cokolwiek innego, co się działo.

94
00:06:44,120 --> 00:06:51,350
‫Po prostu chcemy zawsze iść i robić to, co jest dyktowane przez ten stan tablicy.

95
00:06:51,350 --> 00:06:56,690
‫Miejmy więc nadzieję, że ma to sens, że raporty obserwatorów zatrzymują rzeczy w działaniu, w przeciwnym razie

96
00:06:56,690 --> 00:06:59,720
‫poczeka, aż akcja się zakończy, zanim dokona ponownej oceny.

97
00:07:00,470 --> 00:07:07,370
‫Więc naprawdę, teraz chcemy iść dalej i zaimplementować naszą ostatnią znaną lokalizację i lokalizację odtwarzania, ponieważ w tej chwili,

98
00:07:07,640 --> 00:07:13,520
‫jeśli przejdziemy do naszego C++ i damy sobie trochę więcej miejsca, wtedy widać, że tylko to

99
00:07:13,520 --> 00:07:16,220
‫ustawiamy miejsce gry w Rozpocznij grę.

100
00:07:16,340 --> 00:07:21,380
‫Najlepiej byłoby, gdybyśmy robili to za każdym razem, gdy nasza pula graczy jest w zasięgu wzroku, więc

101
00:07:21,380 --> 00:07:23,540
‫możemy odkomentować tutaj nasz kod linii widzenia.

102
00:07:24,110 --> 00:07:27,320
‫I prawdopodobnie chcemy również odkomentować kod else.

103
00:07:27,560 --> 00:07:32,300
‫Ale w tym przypadku nie zamierzamy bezpośrednio usuwać skupienia i zatrzymywać ruchu.

104
00:07:32,300 --> 00:07:35,570
‫Mogę iść dalej i całkowicie je usunąć, ponieważ.

105
00:07:35,610 --> 00:07:37,590
‫W tej chwili nie tak robimy.

106
00:07:38,130 --> 00:07:47,130
‫Zamiast tego, co chcemy zrobić, jeśli usunę kod, to chcemy być tutaj, ustawiając lokalizację

107
00:07:47,130 --> 00:07:47,940
‫gracza.

108
00:07:48,300 --> 00:07:53,500
‫Chcemy również ustawić tam ostatnią znaną lokalizację.

109
00:07:54,000 --> 00:07:59,520
‫A w innym chcemy wyczyścić lokalizację gracza.

110
00:08:00,270 --> 00:08:07,800
‫Teraz, aby to zrobić, mamy dostępną dla nas funkcję, która zamiast ustawionej wartości jako wektora,

111
00:08:07,800 --> 00:08:15,210
‫jeśli pójdziemy dalej i otworzymy nasz składnik tablicy dot h, jest wyraźna wartość.

112
00:08:15,630 --> 00:08:21,150
‫A to po prostu przyjmuje nazwę f, nie musi brać typu ani niczego, albo ponieważ po prostu

113
00:08:21,150 --> 00:08:23,850
‫całkowicie wymazujemy to, co było w tej zmiennej.

114
00:08:24,570 --> 00:08:27,360
‫Więc tutaj mam dla ciebie wyzwanie, abyś wypełnił nasz haczyk.

115
00:08:27,780 --> 00:08:30,420
‫Ustaw dwie zmienne, gdy linia wzroku.

116
00:08:30,450 --> 00:08:39,240
‫Zasadniczo wypełnij pierwszą część instrukcji F, a następnie wyczyść lokalizację gracza, gdy mamy inne.

117
00:08:39,240 --> 00:08:41,940
‫Więc kiedy tracimy linię wzroku, nie mamy już miejsca do zabawy.

118
00:08:42,360 --> 00:08:48,300
‫Zmniejsz prędkość wroga znajdującego się w świecie, aby łatwiej mu się oddalić.

119
00:08:48,630 --> 00:08:54,720
‫A potem sprawdź funkcjonalność, sprawdź, czy jesteś w stanie schować się za rogiem i czy udaje się do ostatniej

120
00:08:54,720 --> 00:08:56,920
‫znanej lokalizacji, aby spróbować Cię znaleźć.

121
00:08:57,330 --> 00:08:59,190
‫Zatrzymaj wideo i spróbuj.

122
00:09:00,460 --> 00:09:00,780
‫Dobra.

123
00:09:00,790 --> 00:09:01,370
‫Witamy spowrotem.

124
00:09:01,390 --> 00:09:02,500
‫Więc spróbujmy.

125
00:09:02,530 --> 00:09:04,210
‫Przede wszystkim ustalamy lokalizację gry.

126
00:09:04,210 --> 00:09:06,970
‫Przeniosę to z początku gry i przeniosę tutaj.

127
00:09:07,480 --> 00:09:12,670
‫Więc zamierzając ustawić lokalizację gracza na, musimy wprowadzić gracza tutaj i wziąć ponownie.

128
00:09:13,000 --> 00:09:14,320
‫Więc odkomentuję tę linię.

129
00:09:14,800 --> 00:09:21,100
‫A potem robimy dokładnie to samo, dokładnie ten sam wiersz kodu dla naszej ostatniej znanej lokalizacji

130
00:09:21,100 --> 00:09:21,930
‫gracza tutaj.

131
00:09:21,940 --> 00:09:28,030
‫Przejdźmy więc do naszej tablicy i po prostu upewnijmy się, że ją skopiowaliśmy, aby otrzymać dokładnie tę samą nazwę,

132
00:09:28,030 --> 00:09:33,100
‫a potem po prostu chcemy wyczyścić, że ostatnią rzeczą jest wyczyszczenie lokalizacji naszego gracza tutaj.

133
00:09:33,100 --> 00:09:39,550
‫Tak więc będzie to wartość wyczyszczenia i przyjmie tę lokalizację odtwarzacza tekstu jako wartość, którą

134
00:09:39,550 --> 00:09:41,740
‫próbujemy wyczyścić na końcu.

135
00:09:42,400 --> 00:09:46,600
‫I możemy iść dalej, skompilować i zobaczyć, czy to zadziała.

136
00:09:48,700 --> 00:09:50,500
‫Kompilacja zakończyła się sukcesem.

137
00:09:50,500 --> 00:09:56,500
‫Inną rzeczą, którą powiedziałem, aby ułatwić debugowanie, było wybranie wroga i

138
00:09:56,500 --> 00:10:04,300
‫możemy zmienić jego prędkość, schodząc do jego elementów ruchu, odnajdując chód i znajdując jego prędkość.

139
00:10:04,310 --> 00:10:07,060
‫Tak więc maksymalna prędkość chodzenia wynosi tutaj 600.

140
00:10:07,390 --> 00:10:11,440
‫Ustawmy go na 400, abyśmy mogli łatwo od nich uciec.

141
00:10:11,440 --> 00:10:15,140
‫Będą chodzić trochę wolno, pójdą dalej i będą się bawić.

142
00:10:15,160 --> 00:10:16,660
‫Idą powoli w kierunku.

143
00:10:16,660 --> 00:10:17,740
‫Możemy uciec.

144
00:10:18,130 --> 00:10:20,230
‫Chowamy się za rogiem i tu idą.

145
00:10:20,230 --> 00:10:22,570
‫Przyjdź za każdym razem nas szukać.

146
00:10:22,960 --> 00:10:27,820
‫Ale miejmy nadzieję, że jeśli schowamy się za dwoma rogami, nie będą w stanie nas znaleźć.

147
00:10:28,240 --> 00:10:30,880
‫Więc chowam się tam, chowam się tutaj, chowam się tutaj.

148
00:10:31,330 --> 00:10:35,320
‫I zamierza zbadać ostatnią znaną lokalizację, widzicie, właśnie wystawił głowę

149
00:10:35,320 --> 00:10:39,490
‫za róg, ale potem utknął tam, bo nie wie, co robić.

150
00:10:39,940 --> 00:10:46,870
‫A gdybyśmy mieli spojrzeć na nasze drzewo zachowań i po prostu odłożyć to na jedną stronę, a grę

151
00:10:46,870 --> 00:10:49,870
‫na drugą i dać sobie trochę miejsca.

152
00:10:50,350 --> 00:10:54,850
‫Następnie, jeśli przyjrzymy się drzewu zachowań, zobaczymy, że tutaj trochę się kręci, ponieważ nie

153
00:10:54,850 --> 00:10:56,560
‫może zrobić żadnego z nich.

154
00:10:56,560 --> 00:11:00,220
‫Próbuje przenieść się do ostatniej znanej lokalizacji, która mu się udaje.

155
00:11:00,460 --> 00:11:01,720
‫Więc trochę tu utknęło.

156
00:11:02,020 --> 00:11:05,710
‫Ale jeśli wejdę w pole widzenia, widać, że zbliża się do mnie.

157
00:11:06,070 --> 00:11:11,530
‫Jeśli straci mnie z oczu, przechodzi do stanu śledztwa.

158
00:11:11,920 --> 00:11:12,730
‫Więc trać z oczu.

159
00:11:12,730 --> 00:11:13,840
‫Zamierza zbadać sprawę.

160
00:11:14,230 --> 00:11:17,890
‫A potem przychodzi i widzi mnie, a potem wraca do mnie.

161
00:11:18,250 --> 00:11:20,740
‫Więc to zachowanie faktycznie działa.

162
00:11:20,740 --> 00:11:29,650
‫Teraz możemy dokonać wyboru między próbą ścigania a próbą zbadania na podstawie tego zachowania tablicy.

163
00:11:29,650 --> 00:11:37,060
‫Zmieńmy tylko nazwę tej tablicy na zachowanie tutaj, aby zobaczyć, jak gra w znak zapytania.

164
00:11:37,300 --> 00:11:38,860
‫Więc będzie to o wiele łatwiejsze do odczytania.

165
00:11:38,860 --> 00:11:43,960
‫Teraz mamy ten selektor, który może zobaczyć, jak go zagrać, a następnie powinniśmy go ścigać, w

166
00:11:43,960 --> 00:11:48,820
‫przeciwnym razie powinniśmy zbadać i usunąć tę sekwencję tutaj, ponieważ nie jest już używana.

167
00:11:49,300 --> 00:11:54,700
‫Miejmy nadzieję, że teraz lepiej rozumiesz, w jaki sposób drzewa zachowań mogą być ze

168
00:11:54,700 --> 00:12:01,390
‫sobą połączone, aby tworzyć wybór i kolejność oraz łączyć wiele zadań, aby naprawdę łatwo tworzyć bardziej złożone zachowania.

169
00:12:01,780 --> 00:12:07,990
‫W następnym wykładzie przyjrzymy się, jak możemy tworzyć własne niestandardowe zadania w C++, aby

170
00:12:07,990 --> 00:12:10,330
‫uzyskać trochę akcji strzeleckiej.

171
00:12:10,450 --> 00:12:11,740
‫Do zobaczenia w następnym filmie.

