﻿1
00:00:04,430 --> 00:00:05,660
‫Cześć i witaj.

2
00:00:05,660 --> 00:00:11,810
‫W tym wykładzie przyjrzymy się wektorom i ogólnie bardziej skomplikowanym rzeczom, takim jak struktury w

3
00:00:11,810 --> 00:00:19,610
‫C++ oraz tym, jak możemy uzyskać dostęp do poszczególnych części zarówno w celu ustawienia, jak i pobrania ich ze struktury.

4
00:00:19,790 --> 00:00:20,420
‫Zanurzmy się.

5
00:00:21,320 --> 00:00:27,770
‫Tak więc nauczyliśmy się radzić sobie z podstawowymi typami danych w C++, tworzyć zmienne i przypisywać do nich, a nawet

6
00:00:27,770 --> 00:00:29,630
‫wykonywać z nimi podstawową arytmetykę.

7
00:00:29,990 --> 00:00:35,330
‫Ale co, gdybyśmy chcieli zajmować się bardziej skomplikowanymi typami, takimi jak wektory i przekształcenia?

8
00:00:35,930 --> 00:00:38,030
‫Cóż, proces jest w rzeczywistości bardzo podobny.

9
00:00:38,030 --> 00:00:41,600
‫Zacznijmy od wyczyszczenia części kodu testowego, który już mamy.

10
00:00:41,600 --> 00:00:43,550
‫Zamierzam usunąć wszystkie moje właściwości.

11
00:00:43,550 --> 00:00:46,460
‫Dla mnie to linia 26 do 51.

12
00:00:47,030 --> 00:00:54,290
‫Przejdę też do pliku C++ i usunę wiersze od 19 do 23, gdzie wykonuję całą pracę

13
00:00:54,290 --> 00:00:56,870
‫ze zmiennymi, które właśnie usunąłem.

14
00:00:56,870 --> 00:01:01,550
‫Więc teraz Begin Play jest całkowicie pusty i wróciliśmy do punktu wyjścia.

15
00:01:02,660 --> 00:01:06,290
‫Więc teraz to, co chcę zrobić, to dodać nową nieruchomość.

16
00:01:06,290 --> 00:01:15,980
‫Więc znowu edytuj wersaliki w dowolnym miejscu i zamierzam nadać temu typ wektora F, zauważ wielkie litery F, duże V i

17
00:01:15,980 --> 00:01:22,250
‫tak postępujemy z wektorami, z którymi mieliśmy do czynienia w Blueprint, są tymi

18
00:01:22,250 --> 00:01:27,410
‫samymi wektorami pod powierzchni, ale tak to piszemy w C++.

19
00:01:27,410 --> 00:01:33,680
‫Poprzedzająca ją F po prostu informuje nas, że jest to struktura w taki sam sposób, jak A poprzedzająca

20
00:01:33,680 --> 00:01:34,580
‫ruchomą platformę.

21
00:01:34,580 --> 00:01:36,800
‫Daje nam znać, że to jest aktor.

22
00:01:37,040 --> 00:01:38,360
‫To nie jest kwestia C++.

23
00:01:38,360 --> 00:01:43,970
‫To nierealna konwencja nazewnictwa różnych klas, struktur i typów.

24
00:01:44,720 --> 00:01:47,240
‫Więc to, co zrobimy, to nadanie tej zmiennej jej nazwy.

25
00:01:47,240 --> 00:01:50,840
‫A to działa dokładnie tak samo, jak gdyby to był pływak lub wydarzenie.

26
00:01:51,170 --> 00:01:53,540
‫Możemy to na przykład nazwać moim floatem.

27
00:01:53,540 --> 00:01:54,770
‫Nie musi mieć spacji.

28
00:01:55,280 --> 00:01:59,060
‫A jeśli mielibyśmy wstawić średnik na końcu wiersza, to to wszystko.

29
00:01:59,060 --> 00:02:06,110
‫Zadeklarowaliśmy nową zmienną, która będzie widoczna w naszym okienku szczegółów w edytorze, ale to dla mnie

30
00:02:06,110 --> 00:02:07,040
‫za mało.

31
00:02:07,040 --> 00:02:13,760
‫Chciałbym nadać temu domyślną wartość, która różni się od domyślnej 000.

32
00:02:14,150 --> 00:02:17,630
‫Aby to zrobić, musimy zaktualizować nasz glosariusz o nowy termin.

33
00:02:17,630 --> 00:02:24,830
‫Potrzebujemy konstruktora, który jest zasadniczo czymś w C++, który tworzy nową strukturę lub wartość klasy A.

34
00:02:25,280 --> 00:02:33,050
‫Więc gdybyśmy mieli stworzyć konstruktor dla wektora, sposób, w jaki to zadziała, to przypisanie wartości, więc

35
00:02:33,050 --> 00:02:34,640
‫trafimy na równe.

36
00:02:34,640 --> 00:02:40,520
‫I zazwyczaj, gdy mamy do czynienia z liczbami całkowitymi lub zmiennoprzecinkowymi, możemy po prostu użyć czegoś takiego jak

37
00:02:40,520 --> 00:02:46,040
‫jeden lub prawda, które zostały wbudowane w wartości, które pozwalają nam ustawić wartość tych podstawowych typów.

38
00:02:46,400 --> 00:02:53,090
‫Ale kiedy mamy bardziej złożone typy, takie jak struktura, musimy użyć konstruktora, a konstruktor zawsze będzie miał

39
00:02:53,090 --> 00:02:59,120
‫taką samą nazwę jak typ danych, więc będzie miał dokładnie taką samą pisownię wektorową.

40
00:02:59,450 --> 00:03:05,870
‫Następnie otwierasz kilka nawiasów i wewnątrz nawiasów podajesz żądane wartości.

41
00:03:05,870 --> 00:03:08,570
‫Więc X, Y i Z tworzą wektor.

42
00:03:08,570 --> 00:03:14,990
‫Mogliśmy więc mieć jeden, dwa i trzy oddzielone przecinkami, a następnie zamknęliśmy nawiasy i wstawiliśmy

43
00:03:14,990 --> 00:03:16,760
‫średnik na końcu wiersza.

44
00:03:17,090 --> 00:03:23,420
‫A to da domyślną wartość jeden, dwa i trzy w X, Y i Z dla tego wektora.

45
00:03:23,420 --> 00:03:24,290
‫Wypróbujmy to.

46
00:03:24,680 --> 00:03:27,200
‫Wróć do Unreal i naciśnij przycisk kompilacji.

47
00:03:27,680 --> 00:03:34,520
‫A kiedy zakończy się to pomyślnie, możemy upewnić się, że mamy wybraną ustawę o ruchomej platformie w naszym zarysie

48
00:03:34,520 --> 00:03:40,010
‫i spojrzeć na okienko szczegółów i zobaczyć, że rzeczywiście mamy nową właściwość o nazwie My

49
00:03:40,010 --> 00:03:40,700
‫Float.

50
00:03:40,700 --> 00:03:47,180
‫Pozostałe zostały odjęte, a wartości w różnych pozycjach X, Y i Z to jeden, dwa i

51
00:03:47,180 --> 00:03:49,430
‫trzy, tak jak się spodziewaliśmy.

52
00:03:50,180 --> 00:03:51,050
‫Więc to świetnie.

53
00:03:51,200 --> 00:03:57,560
‫A gdybym chciał zdobyć te wartości i umieścić je być może w innej własności?

54
00:03:57,710 --> 00:04:04,010
‫Więc jeśli miałbym mieć inną właściwość, która jest oznaczona jako dodana w dowolnym miejscu, abym

55
00:04:04,580 --> 00:04:12,860
‫mógł ją zobaczyć w inspektorze, wpisałem float nazwany my x i domyślnie ustawię to na zero, abyśmy mogli zobaczyć, że to zmieniamy.

56
00:04:13,730 --> 00:04:20,690
‫A to, co chcę zrobić, to pobrać wartość x z mojej zmiennej zmiennoprzecinkowej na początku gry i chcę ją ustawić

57
00:04:20,690 --> 00:04:22,130
‫w mojej zmiennej x.

58
00:04:22,610 --> 00:04:30,320
‫Przejdźmy więc do pliku C++ i zacznijmy grać po wierszu, który mówi, że w grze jest bardzo

59
00:04:30,320 --> 00:04:37,970
‫duży, ustawimy moje X równe temu, co chcemy uzyskać z mojego wektora, ale nie chcemy całości mojego

60
00:04:37,970 --> 00:04:38,570
‫wektora.

61
00:04:38,570 --> 00:04:39,800
‫To byłby błąd.

62
00:04:39,800 --> 00:04:44,570
‫Nie możemy ustawić wektora jako zmiennoprzecinkowego, chcemy tylko części x tego wektora.

63
00:04:45,050 --> 00:04:48,620
‫Aby to zrozumieć, musimy zrozumieć pojęcie operatora.

64
00:04:48,740 --> 00:04:53,030
‫Operatory to symbole w C++, które coś robią.

65
00:04:53,030 --> 00:04:54,410
‫Widzieliśmy już kilka.

66
00:04:54,650 --> 00:04:57,890
‫Widzieliśmy operator plusa, który dodaje dwie rzeczy do siebie.

67
00:04:57,890 --> 00:04:59,450
‫Jest też operator minus.

68
00:04:59,450 --> 00:05:03,770
‫Jest operator równości, operator równości, który przypisuje.

69
00:05:03,890 --> 00:05:04,270
‫Rzeczy.

70
00:05:04,270 --> 00:05:06,710
‫Więc używamy tego tutaj, w wierszu 19.

71
00:05:06,710 --> 00:05:11,750
‫To jest operator, który przypisuje wartość mojego wektora do mojego X.

72
00:05:12,350 --> 00:05:18,620
‫A potem mamy jeszcze jednego operatora, którego musimy poznać, który jest operatorem DOT.

73
00:05:18,980 --> 00:05:23,300
‫Jest to operator, który pobiera coś z wnętrza struktury lub klasy.

74
00:05:23,390 --> 00:05:27,200
‫Więc chcemy pobrać X z mojego wektora.

75
00:05:27,200 --> 00:05:33,860
‫Więc używamy operatora kropki, robimy kropkę x, teraz nie używamy spacji między moim wektorem a x.

76
00:05:34,130 --> 00:05:40,400
‫Po prostu zostawiamy je razem, więc w ten sposób zwykle zostawiamy rzeczy, chociaż niekoniecznie jest to

77
00:05:40,400 --> 00:05:41,930
‫błąd wstawiania spacji.

78
00:05:42,350 --> 00:05:51,260
‫Więc mamy mój wektor kropka x, powinniśmy pobrać wartość x wektora i umieścić ją w my x float.

79
00:05:51,710 --> 00:05:57,470
‫Więc wstawiamy tam średnik na końcu linii i jak zwykle ignoruję czerwone zawijasy, ponieważ czasami aktualizowanie ich

80
00:05:57,470 --> 00:06:00,290
‫zajmuje dużo czasu, a czasami nie są poprawne.

81
00:06:00,770 --> 00:06:06,530
‫A potem zajmiemy się kodowaniem na żywo, wciśniemy przycisk, który ponownie się kompiluje, i po prostu sprawdzimy,

82
00:06:06,530 --> 00:06:08,300
‫czy otrzymaliśmy pomyślny wynik.

83
00:06:08,750 --> 00:06:11,060
‫I nie, widzisz, mamy awarię kompilacji.

84
00:06:11,060 --> 00:06:16,760
‫A jeśli spojrzysz na błąd mówiący, że mój wektor jest niezadeklarowanym identyfikatorem, a to dlatego, że

85
00:06:16,760 --> 00:06:21,620
‫zrobiłem literówkę, nazwałem wektor F moim floatem i prawdopodobnie krzyczysz na ekrany.

86
00:06:21,620 --> 00:06:26,150
‫Ale dobrze jest pokazać, że nawet eksperci, programiści popełniają błędy.

87
00:06:26,150 --> 00:06:30,710
‫Chcieliśmy nazwać to moim wektorem, więc wrócę do pliku głównego i

88
00:06:30,950 --> 00:06:35,540
‫zmienię jego nazwę na mój wektor, co powinno usunąć problem w moim mózgu.

89
00:06:35,720 --> 00:06:38,660
‫Przejdźmy dalej i ponownie kliknij przycisk kompilacji.

90
00:06:38,960 --> 00:06:44,130
‫A to tylko daje przedsmak tego, jak to jest, gdy popełniasz błędy, otrzymujesz błąd kompilacji.

91
00:06:44,130 --> 00:06:45,230
‫To się zdarza cały czas.

92
00:06:45,230 --> 00:06:48,230
‫W rzeczywistości bardzo rzadko zdarza się nie popełniać błędów.

93
00:06:48,230 --> 00:06:54,740
‫Gdy zrobisz coś po raz pierwszy, przejdziemy dalej i klikniemy „odtwórz” i zobaczymy, jaką wartość otrzymamy

94
00:06:54,770 --> 00:06:56,270
‫w okienku szczegółów.

95
00:06:56,270 --> 00:07:05,000
‫Możesz teraz zobaczyć, że moje x zostało ustawione na jeden, ponieważ była to wartość składnika x mojej zmiennej

96
00:07:05,000 --> 00:07:05,720
‫wektorowej.

97
00:07:06,170 --> 00:07:09,740
‫Więc chciałbym rzucić wyzwanie, aby ustawić wartość wektora.

98
00:07:09,740 --> 00:07:11,870
‫Pobieramy wartości z wektora.

99
00:07:11,870 --> 00:07:13,010
‫Teraz spróbujmy je ustawić.

100
00:07:13,010 --> 00:07:17,000
‫Zasadniczo spróbuj użyć operatora kropki, aby ustawić wartość.

101
00:07:17,420 --> 00:07:25,760
‫Spróbuj odwrócić dwie strony tego równania tak, że zamiast tego mamy my X po prawej i mój wektor po

102
00:07:25,760 --> 00:07:26,840
‫lewej stronie.

103
00:07:27,140 --> 00:07:30,260
‫A co, jeśli przejdziesz na Y lub z?

104
00:07:30,500 --> 00:07:33,260
‫Czy jest jakaś różnica, która ciągnie wideo i próbuje?

105
00:07:36,740 --> 00:07:37,390
‫Dobra.

106
00:07:37,400 --> 00:07:37,900
‫Witamy spowrotem.

107
00:07:37,910 --> 00:07:40,580
‫Więc spróbuję odwrócić te dwie rzeczy.

108
00:07:40,580 --> 00:07:44,930
‫Przejdźmy do C++ i zamiast tego zacznijmy grać.

109
00:07:44,930 --> 00:07:52,730
‫Powiem, że mój wektor kropka y jest równy mojemu x, a następnie wstawiam średnik na końcu wiersza.

110
00:07:52,970 --> 00:07:57,530
‫I w ten sposób możemy również ustawić wartości w strukturze.

111
00:07:57,920 --> 00:08:06,920
‫Więc wróćmy do Unreal i przekompilujmy, a potem możemy iść dalej i ustawić jakąś wartość w moim X.

112
00:08:06,920 --> 00:08:08,690
‫Wstawię tutaj wartość pięć.

113
00:08:10,070 --> 00:08:15,410
‫Potem zacznę grać i rzucić okiem na okienko szczegółów ruchomej platformy.

114
00:08:15,740 --> 00:08:24,320
‫I rzeczywiście, wartość y mojego wektora została zaktualizowana na początku gry o wartość w moim x.

115
00:08:24,860 --> 00:08:26,000
‫Więc gratulacje.

116
00:08:26,000 --> 00:08:33,020
‫Widzieliśmy, jak używać bardziej skomplikowanych typów, typów złożonych, takich jak struktury w C++.

117
00:08:33,020 --> 00:08:34,640
‫Do zobaczenia na następnym wykładzie.

