﻿1
00:00:04,420 --> 00:00:05,380
‫Cześć i witaj.

2
00:00:05,380 --> 00:00:10,030
‫W tym wykładzie dodamy nowe komponenty do odtwarzacza aplikacji, uchwyt

3
00:00:10,030 --> 00:00:16,030
‫fizyki, i nauczymy się, jak możemy uzyskać do nich wskaźnik w naszym komponencie grabber.

4
00:00:16,030 --> 00:00:20,620
‫Przyjrzymy się również, jak możemy uchronić się przed przypadkowym awarią silnika.

5
00:00:20,830 --> 00:00:23,140
‫Zanurzmy się i zobaczmy jak.

6
00:00:24,280 --> 00:00:29,170
‫Teraz, aby złapać przedmiot, musimy wejść w interakcję z systemem fizycznym.

7
00:00:29,500 --> 00:00:37,030
‫W rzeczywistości istnieje element, którego możemy użyć, zwany uchwytem fizyki, który pozwala nam chwytać obiekty fizyczne i mówić im, gdzie

8
00:00:37,030 --> 00:00:43,030
‫chcemy być na świecie, ale robi to w taki sposób, aby uwzględniał ograniczenia fizyczne, więc

9
00:00:43,030 --> 00:00:45,530
‫tak się dzieje. przechodzić przez ściany.

10
00:00:46,120 --> 00:00:53,170
‫I wygląda na to, że obiekt jest na sprężynie, a nie sztywno podąża za konkretnym punktem, do którego mówimy,

11
00:00:53,170 --> 00:00:54,640
‫aby się udał.

12
00:00:55,150 --> 00:00:57,850
‫Więc użyjemy komponentów uchwytu fizyki.

13
00:00:57,850 --> 00:01:02,200
‫Zamierzamy dodać go do naszego odtwarzacza, BP, wraz z grabberem.

14
00:01:02,200 --> 00:01:09,550
‫Przejdźmy więc do przycisku dodawania pod panelem komponentów i poszukajmy uchwytu fizyki i dodajmy.

15
00:01:09,910 --> 00:01:14,110
‫I widać, że jest to składnik aktorski, a nie składnik sceny,

16
00:01:14,320 --> 00:01:18,220
‫ponieważ schodzi w dół, więc nie ma własnej fizycznej transformacji.

17
00:01:18,610 --> 00:01:23,770
‫To, co robimy z uchwytem fizyki, to mówimy obiektowi, który ma chwycić, a następnie mówimy mu, gdzie

18
00:01:23,770 --> 00:01:25,900
‫chcemy, aby umieścił obiekt, który złapaliśmy.

19
00:01:26,230 --> 00:01:31,810
‫Jeśli przejdziesz do dokumentacji, zobaczysz to w dostępnych funkcjach.

20
00:01:31,990 --> 00:01:39,370
‫Jeśli przewiniesz w dół do sekcji funkcji, zobaczysz, że w funkcji lokalizacji znajduje się komponent zwalniający

21
00:01:39,370 --> 00:01:41,110
‫i komponent chwytający.

22
00:01:41,440 --> 00:01:45,910
‫Istnieje również ustalona lokalizacja docelowa i rotacja.

23
00:01:45,910 --> 00:01:51,100
‫W tym miejscu chce spróbować umieścić przedmiot, ale oczywiście będzie respektował wszelkie fizyczne

24
00:01:51,100 --> 00:01:56,260
‫ograniczenia, robiąc to i zrobi to płynnie, jakby był na sprężynie.

25
00:01:56,500 --> 00:02:02,380
‫Teraz nie zamierzamy jeszcze używać tych funkcji, ale musimy znaleźć sposób na zdobycie

26
00:02:02,380 --> 00:02:05,230
‫tego komponentu w naszym komponencie grabber.

27
00:02:05,710 --> 00:02:07,540
‫Więc jak to robimy?

28
00:02:07,840 --> 00:02:15,260
‫Cóż, chodźmy do naszego zgarnij C. P i spójrz na dużą grę i spróbuj ją zdobyć.

29
00:02:15,280 --> 00:02:23,740
‫Teraz istnieje funkcja na dowolnym aktorze, która pozwala nam znaleźć komponent według jego typu.

30
00:02:24,100 --> 00:02:27,110
‫Ale jaki jest rodzaj fizycznego uchwytu?

31
00:02:27,130 --> 00:02:34,450
‫Cóż, jest to komponent obsługi fizyki, który jest tego typu, którego musimy użyć i dołączyć. Możesz zobaczyć, że

32
00:02:34,450 --> 00:02:40,090
‫dołączanie w dokumentacji jest komponentem uchwytu fizyki silnika fizyki z ukośnikiem do przodu.

33
00:02:40,090 --> 00:02:46,150
‫Skopiujmy więc to, co przechodzi do Grabbera CP i dodatku pod add draw debug helpers.

34
00:02:46,900 --> 00:02:53,260
‫Następnie zrobimy to, aby uzyskać ONA, aby uchwycić nasz akt

35
00:02:53,680 --> 00:03:00,070
‫posiadania, następnie wskaźnik na strzałkę i fajny komponent znajdowania według klasy.

36
00:03:00,400 --> 00:03:07,510
‫Teraz ta funkcja jest specjalnym rodzajem funkcji zwanej funkcją szablonu w C++, a to

37
00:03:07,510 --> 00:03:14,230
‫oznacza, że możesz przekazać jej pewne parametry, które są faktycznie oceniane podczas kompilacji.

38
00:03:14,470 --> 00:03:18,790
‫Sposób, w jaki to robisz, to używanie takich nawiasów kątowych.

39
00:03:19,240 --> 00:03:25,270
‫Więc używasz nawiasu kątowego po funkcji i nadajesz jej typ, który chcesz

40
00:03:25,270 --> 00:03:30,640
‫znaleźć, co w naszym przypadku jest komponentem obsługi fizyki.

41
00:03:31,090 --> 00:03:33,220
‫A potem zamykasz nawiasy kątowe.

42
00:03:33,220 --> 00:03:37,630
‫Ale ponieważ jest to funkcja, musisz ją również wywołać, używając zwykłych nawiasów.

43
00:03:37,630 --> 00:03:41,680
‫Więc po tym umieszczasz drugi zestaw nawiasów.

44
00:03:41,680 --> 00:03:48,580
‫Możesz więc zobaczyć, że te argumenty czasu kompilacji są przekazywane za pomocą nawiasów ostrych, a następnie

45
00:03:48,580 --> 00:03:52,090
‫argumenty czasu wykonywania są przekazywane za pomocą nawiasów.

46
00:03:52,690 --> 00:03:58,840
‫Teraz, tak jak zwykła funkcja, ta będzie miała wartość zwracaną iw tym przypadku wartością zwracaną będzie

47
00:03:58,840 --> 00:04:01,270
‫dowolny typ, który tutaj przekazaliśmy.

48
00:04:01,420 --> 00:04:08,650
‫Ale jako wskaźnik, więc możemy wziąć wskaźnik komponentu do uchwytu fizyki i utworzyć zmienną dla

49
00:04:08,650 --> 00:04:16,150
‫tego, co nazwiemy uchwytem fizyki i ustawić go na to, aby uzyskać właściciel znajdź składnik według klasy.

50
00:04:16,510 --> 00:04:21,850
‫Zapamiętajmy teraz średnik na końcu tej linii i to jest wszystko, co jest

51
00:04:21,850 --> 00:04:25,930
‫potrzebne, abyśmy mogli zdobyć inny składnik tego samego aktora.

52
00:04:26,170 --> 00:04:32,680
‫Teraz pamiętaj, że powiedziałem ci, że wskaźniki mogą być niebezpieczne, ponieważ czasami mogą być wartością zerową, a to

53
00:04:32,680 --> 00:04:34,510
‫może prowadzić do awarii.

54
00:04:34,840 --> 00:04:42,040
‫Więc wyobraźmy sobie, że zapomnieliśmy umieścić komponent uchwytu fizyki na naszym aktorze, albo umieściliśmy grabber na nowym aktorze

55
00:04:42,040 --> 00:04:46,000
‫i nie połączyliśmy go jeszcze z komponentem uchwytu fizyki.

56
00:04:46,180 --> 00:04:52,360
‫W takim przypadku wskaźnik uchwytu fizyki będzie wskaźnikiem zerowym.

57
00:04:52,540 --> 00:04:58,540
‫A jeśli spróbujemy użyć operatora strzałki lub operatora odniesienia na tym wskaźniku, spowoduje to awarię

58
00:04:58,540 --> 00:04:59,530
‫naszego silnika.

59
00:04:59,530 --> 00:05:03,070
‫Czasami naprawdę trudno jest zobaczyć, jak wygląda ta awaria.

60
00:05:03,490 --> 00:05:09,940
‫Więc zamierzam po prostu iść dalej i faktycznie spowodować to awarię tylko po to, aby ci to pokazać i możesz

61
00:05:09,940 --> 00:05:15,640
‫być w stanie to rozpoznać, jeśli zdarzy ci się to w przyszłości, zamierzam zmienić przypisanie naszego wskaźnika

62
00:05:15,640 --> 00:05:17,740
‫uchwytu fizyki równego wskaźnikowi zerowemu .

63
00:05:18,970 --> 00:05:20,230
‫Specjalne słowo kluczowe.

64
00:05:20,290 --> 00:05:20,680
‫To wszystko.

65
00:05:21,100 --> 00:05:22,360
‫Nie, Piotrze.

66
00:05:22,420 --> 00:05:24,520
‫Tak napisałeś wskaźnik NULL w C++.

67
00:05:24,520 --> 00:05:25,780
‫Na końcu stawiasz średnik.

68
00:05:26,140 --> 00:05:32,170
‫A potem możemy zrobić fizykę, posługiwać się strzałką, uzyskać taką nazwę.

69
00:05:32,710 --> 00:05:38,140
‫A jeśli pójdziemy dalej i skompilujemy używając kodowania na żywo, a kiedy zakończy się kompilacja, będziemy

70
00:05:38,140 --> 00:05:43,960
‫iść dalej i przede wszystkim upewnić się, że zapisujemy wszystko, co mamy tutaj, w IBP plex i

71
00:05:43,960 --> 00:05:45,520
‫zaraz się zawiesi silnik.

72
00:05:45,880 --> 00:05:50,080
‫A jeśli pójdę dalej i wcisnę play, to w rezultacie dostaniemy awarię.

73
00:05:50,080 --> 00:05:55,360
‫Reporter I możesz ulec pokusie, by pomyśleć, kiedy to zobaczysz, że coś poszło nie tak z nierzeczywistością,

74
00:05:55,360 --> 00:05:58,210
‫ale tak naprawdę to twój kod jest tutaj winny.

75
00:05:58,540 --> 00:06:06,190
‫Możesz zobaczyć, że w tym raporcie o awarii pierwsza linia mówi, że problem pochodzi od ciebie, chwyć

76
00:06:06,220 --> 00:06:08,170
‫dwukropek, dwukropek, zacznij grać.

77
00:06:08,170 --> 00:06:11,440
‫I faktycznie daje nam również numer wiersza, czyli wiersz 28.

78
00:06:11,890 --> 00:06:18,370
‫Widać więc, że w tym miejscu w linii 28, kiedy odwołujemy się do

79
00:06:18,370 --> 00:06:26,020
‫tego wskaźnika, aby wywołać na nim funkcję, popełniliśmy poważny błąd, nie sprawdzając najpierw, czy ten wskaźnik jest

80
00:06:26,020 --> 00:06:26,560
‫pusty.

81
00:06:27,010 --> 00:06:28,300
‫Więc to właśnie musimy zrobić.

82
00:06:28,300 --> 00:06:29,650
‫I robimy to za pomocą instrukcji if.

83
00:06:29,650 --> 00:06:41,350
‫Zasadniczo mówimy, że jeśli uchwyt fizyki nie jest równy wskaźnikowi null, to możemy śmiało wywoływać coś na tym uchwycie fizyki, abyśmy mogli umieścić uchwyt fizyki, uzyskać

84
00:06:41,350 --> 00:06:47,080
‫nazwę wewnątrz tego wyrażenia if i to nas chroni, ponieważ ten kod, że

85
00:06:47,080 --> 00:06:52,270
‫kod odwołujący się nie zostanie wykonany w przypadku, gdy mamy pusty

86
00:06:52,270 --> 00:06:53,200
‫wskaźnik.

87
00:06:53,470 --> 00:06:58,780
‫Więc zamierzam teraz usunąć wiersz 27, w którym ustawiamy go na brak wskaźnika i

88
00:06:58,780 --> 00:07:02,410
‫rzucę wam wyzwanie, abyście wydrukowali nazwę komponentu dla siebie.

89
00:07:02,860 --> 00:07:10,900
‫Więc drukuj tylko wtedy, gdy mamy rzeczywisty składnik, w zasadzie nie mamy pustego wskaźnika i używamy else, aby ostrzec, jeśli

90
00:07:10,900 --> 00:07:16,990
‫nie udało nam się zdobyć tego składnika i spróbować usunąć składnik, aby sprawdzić, wstrzymać wideo

91
00:07:17,290 --> 00:07:18,940
‫i mieć temu.

92
00:07:22,230 --> 00:07:22,710
‫Dobra.

93
00:07:22,710 --> 00:07:23,550
‫Witamy spowrotem.

94
00:07:23,640 --> 00:07:33,360
‫Utworzymy tutaj nowy komunikat dziennika i powiemy, że mamy uchwyt fizyki, procenty dwukropka s i

95
00:07:33,660 --> 00:07:37,110
‫mamy nazwę uchwytu fizyki.

96
00:07:37,140 --> 00:07:42,990
‫Więc zamierzam po prostu wyciąć i wkleić jako drugi argument lub czwarty argument do dziennika U.

97
00:07:43,470 --> 00:07:46,770
‫I zamierzam umieścić gwiazdę, ponieważ jest to sznurek.

98
00:07:47,010 --> 00:07:49,980
‫Teraz dodajmy instrukcję alt pod naszymi instrukcjami if.

99
00:07:50,310 --> 00:07:55,470
‫A tutaj umieścimy kolejny dziennik roku, który będzie tym

100
00:07:55,470 --> 00:08:02,040
‫razem zamiast wyświetlacza, umieścimy komunikat ostrzegawczy, który pojawi się na żółto

101
00:08:02,700 --> 00:08:07,200
‫i powiemy nie znaleziono uchwyt fizyki, wykrzyknik.

102
00:08:07,410 --> 00:08:08,880
‫Teraz nie otwieraj edytora.

103
00:08:08,880 --> 00:08:14,760
‫Więc zamierzam wykonać przesunięcie kontroli B, aby skompilować w kodzie programu Visual Studio, zamknąć terminal, gdy

104
00:08:14,760 --> 00:08:17,700
‫się powiedzie, i ponownie uruchomić nowy projekt.

105
00:08:17,760 --> 00:08:25,330
‫Po uruchomieniu, przejdźmy dalej i naciśnij play, otwórz dziennik wyjściowy i powinniśmy zobaczyć komunikat dziennika.

106
00:08:25,330 --> 00:08:26,970
‫Mam uchwyt do fizyki.

107
00:08:26,970 --> 00:08:29,550
‫Jaka nazwa to znajomy uchwyt fizyki.

108
00:08:30,060 --> 00:08:39,450
‫A co, gdybyśmy podeszli do naszego odtwarzacza dźwiękowego i faktycznie usunęli ten uchwyt fizyki i

109
00:08:39,450 --> 00:08:41,070
‫zaczęli grać.

110
00:08:41,070 --> 00:08:47,880
‫Teraz spójrz na nasz dziennik wyjściowy, a oni idą, mamy żółte ostrzeżenie, że nie znaleziono uchwytu

111
00:08:47,970 --> 00:08:48,720
‫fizyki.

112
00:08:48,840 --> 00:08:49,800
‫Więc przestańmy grać.

113
00:08:50,070 --> 00:08:55,800
‫Przejdźmy dalej i dodajmy uchwyt fizyki z powrotem, ponieważ będziemy go potrzebować i uratujemy gracza.

114
00:08:55,800 --> 00:08:57,030
‫BP Świetne rzeczy.

115
00:08:57,030 --> 00:09:03,540
‫Więc zorientowaliśmy się, jak możemy zdobyć inne komponenty z komponentów i nauczyliśmy się radzić sobie

116
00:09:03,540 --> 00:09:05,220
‫z wartością null.

117
00:09:05,220 --> 00:09:08,520
‫Chodzi o to, dlaczego musimy być ostrożni.

118
00:09:08,820 --> 00:09:10,230
‫Do zobaczenia na następnym wykładzie.

