﻿1
00:00:04,470 --> 00:00:05,770
‫Hej, witaj z powrotem.

2
00:00:05,790 --> 00:00:12,240
‫W tym filmie będziemy pracować nad wyświetlaniem tekstu na ekranie, aby poinformować nas, że gra się rozpoczyna.

3
00:00:12,240 --> 00:00:18,240
‫I to jest pierwszy krok do pokazania licznika czasu, aby gracz wiedział, że gra jeszcze

4
00:00:18,240 --> 00:00:21,140
‫się nie rozpoczęła, ale wkrótce się rozpocznie.

5
00:00:21,150 --> 00:00:24,900
‫Teraz będzie to obejmować zdarzenia możliwe do wdrożenia w ramach planu.

6
00:00:24,930 --> 00:00:32,280
‫Blueprint Implementable Event to funkcja C++, którą możemy wywołać z C++, ale w rzeczywistości

7
00:00:32,280 --> 00:00:35,070
‫implementujemy funkcjonalność po stronie projektu.

8
00:00:35,070 --> 00:00:41,910
‫Możemy więc mieć naszą klasę C++, taką jak tryb gry, i możemy mieć funkcję oznaczoną jako plan,

9
00:00:41,910 --> 00:00:47,310
‫możliwe do zaimplementowania zdarzenie, a następnie możemy zaimplementować to zachowanie w planach.

10
00:00:47,310 --> 00:00:54,570
‫Więc kiedy wywołamy funkcję C++ oznaczoną jako zdarzenie możliwe do zaimplementowania w planie, to zdarzenie w planie

11
00:00:54,570 --> 00:00:55,920
‫zostanie uruchomione.

12
00:00:55,920 --> 00:01:01,890
‫I każda logika planu, którą połączymy z tym wydarzeniem w planie, zostanie wywołana.

13
00:01:02,160 --> 00:01:08,640
‫Zamierzam więc stworzyć tutaj funkcję wydarzenia, którą można zaimplementować w planach, w czołgach tuningowych, tryby gry i wydarzenia możliwe do

14
00:01:08,640 --> 00:01:11,310
‫zaimplementowania w planach nie mogą być prywatne.

15
00:01:11,310 --> 00:01:14,220
‫Więc dodam to do sekcji chronionej.

16
00:01:14,220 --> 00:01:19,080
‫Teraz zrobię z tego funkcję void i po prostu wywołam tę grę startową.

17
00:01:19,080 --> 00:01:25,380
‫Teraz, aby uczynić to zdarzenie możliwym do zaimplementowania w planie, muszę nadać mu makro funkcji U z

18
00:01:25,380 --> 00:01:26,160
‫funkcją U.

19
00:01:26,160 --> 00:01:30,570
‫Określ zdarzenie możliwe do zaimplementowania w planie.

20
00:01:30,690 --> 00:01:36,390
‫Teraz, kiedy już zaznaczymy to możliwe do zaimplementowania zdarzenie, nie musimy nawet podawać mu treści funkcji

21
00:01:36,390 --> 00:01:37,800
‫tutaj w C++.

22
00:01:37,800 --> 00:01:43,680
‫Unreal Engine będzie oczekiwał, że zaimplementujemy tę funkcjonalność w planach, ale możemy to

23
00:01:43,680 --> 00:01:49,110
‫nazwać z C++ i dokładnie to zrobimy w Handle Game Start.

24
00:01:49,110 --> 00:01:55,260
‫Więc zaraz po ustawieniu zmiennych czołgu i kontrolera gracza, wywołam start game i teraz

25
00:01:56,070 --> 00:01:57,840
‫możemy to skompilować.

26
00:01:57,840 --> 00:02:04,170
‫Wracając do edytora, otworzę tryb gry dostrajanie czołgów BP i tutaj możemy zaimplementować

27
00:02:04,170 --> 00:02:05,700
‫tę funkcję.

28
00:02:05,700 --> 00:02:13,380
‫Więc jeśli klikniemy prawym przyciskiem myszy i wpiszemy start game, to tutaj jest gra startowa zdarzenia, która została utworzona,

29
00:02:13,380 --> 00:02:19,980
‫gdy tylko zadeklarowaliśmy funkcję i nadaliśmy jej makro funkcji ze zdarzeniem możliwym do zaimplementowania w schemacie.

30
00:02:19,980 --> 00:02:26,580
‫Więc po stronie C++ nazywamy to i w planach to zdarzenie na to odpowiada.

31
00:02:26,610 --> 00:02:33,390
‫Możemy to przetestować za pomocą prostego węzła napisowego, a dla ciągu możemy powiedzieć Rozpocznij grę.

32
00:02:33,600 --> 00:02:37,650
‫Teraz, jeśli klikniemy play, zobaczę rozpoczęcie gry w lewym górnym rogu.

33
00:02:37,650 --> 00:02:41,370
‫Wiemy więc, że nasze wydarzenie do wdrożenia planu działa.

34
00:02:41,370 --> 00:02:49,530
‫Teraz chcielibyśmy, aby to wydarzenie pokazało widżet, który zawiera tekst informujący gracza, że gra ma się rozpocząć,

35
00:02:49,530 --> 00:02:53,880
‫co oznacza, że musimy stworzyć widżet do pokazania.

36
00:02:53,880 --> 00:03:00,960
‫Zamierzam więc utworzyć nowy folder w folderze blueprints i nazwać te widżety i podwójnie

37
00:03:00,960 --> 00:03:02,370
‫kliknąć widżety.

38
00:03:02,370 --> 00:03:05,730
‫I tutaj mam zamiar stworzyć nowy projekt widżetu.

39
00:03:05,940 --> 00:03:11,010
‫Teraz, jeśli kliknę prawym przyciskiem myszy i przejdę do interfejsu użytkownika, oto Widget Blueprint.

40
00:03:11,040 --> 00:03:17,520
‫Teraz, jeśli to kliknę, stworzę nowy schemat widżetu i nazwę go W BP

41
00:03:17,520 --> 00:03:21,540
‫for Widget Blueprint, podkreślenie widżetu rozpoczęcia gry.

42
00:03:21,960 --> 00:03:27,240
‫A jeśli kliknę to dwukrotnie, otworzę edytor Widget Blueprint i zobaczysz, że

43
00:03:27,240 --> 00:03:31,560
‫wygląda trochę inaczej niż edytor Blueprint, do którego przywykliśmy.

44
00:03:31,560 --> 00:03:33,840
‫A to dlatego, że to jest widżet.

45
00:03:33,840 --> 00:03:37,860
‫Widgety są dobre do wyświetlania rzeczy na ekranie, takich jak tekst.

46
00:03:37,890 --> 00:03:43,590
‫Teraz jest ich dużo, a my stworzymy tylko bardzo prosty widżet, który wyświetla tekst.

47
00:03:43,620 --> 00:03:50,310
‫Istnieje wiele różnych typów elementów, które możemy dodać do schematu widżetu, takich jak obramowania, przyciski,

48
00:03:50,310 --> 00:03:53,580
‫pola wyboru, obrazy i tak dalej.

49
00:03:53,580 --> 00:03:58,140
‫Ale to, co nas interesuje, to ten tutaj, który mówi Tekst.

50
00:03:58,140 --> 00:04:05,280
‫Teraz spójrz w dół w panelu hierarchii, zobaczysz, że na górze mamy ogólny widżet startowy

51
00:04:05,280 --> 00:04:06,180
‫WB.

52
00:04:06,180 --> 00:04:10,500
‫A jeśli to klikniemy, możemy zmienić właściwości tego widżetu.

53
00:04:10,530 --> 00:04:14,040
‫Teraz możemy przeciągnąć elementy widżetu do tej hierarchii.

54
00:04:14,040 --> 00:04:20,070
‫Więc przeszukam paletę pod kątem panelu canvas i przeciągnę go w dół do mojej hierarchii.

55
00:04:21,590 --> 00:04:28,880
‫Teraz panel płótna pozwala nam umieszczać elementy widżetów i ustawiać je w żądanym miejscu na ekranie,

56
00:04:28,880 --> 00:04:33,020
‫dzięki czemu możemy przeciągnąć element tekstowy bezpośrednio na wykres.

57
00:04:33,020 --> 00:04:37,910
‫Zobaczysz w hierarchii ten nowy element pod panelem płótna.

58
00:04:37,910 --> 00:04:39,360
‫I mówi: Tekst.

59
00:04:39,360 --> 00:04:40,310
‫Blok tekstowy.

60
00:04:40,310 --> 00:04:47,450
‫Teraz ten blok tekstowy w cudzysłowie to tekst, który jest automatycznie ustawiany dla tego widżetu tekstowego.

61
00:04:47,450 --> 00:04:54,740
‫I tutaj, w panelu szczegółów, z tym widżetem tekstowym wybranym pod zawartością, widzimy właściwość text i jest

62
00:04:54,740 --> 00:04:57,170
‫ona ustawiona na blok tekstu.

63
00:04:57,170 --> 00:05:00,860
‫Ale możemy ustawić to na dowolny tekst, na przykład przygotuj się.

64
00:05:01,250 --> 00:05:06,620
‫Teraz, po ustawieniu tego, aby się przygotować, zobaczysz, że tekst na ekranie mówi: Przygotuj się.

65
00:05:06,710 --> 00:05:13,940
‫Więc edytor Widget Blueprint pozwala nam dostosować nasze widżety w lewym górnym rogu ekranu,

66
00:05:13,940 --> 00:05:17,810
‫ten medalion tutaj, to się nazywa kotwica.

67
00:05:17,840 --> 00:05:22,100
‫Nasz widżet tekstowy jest umieszczany na ekranie w stosunku do kotwicy.

68
00:05:22,100 --> 00:05:27,560
‫Jeśli więc zmieni się rozmiar ekranu, odległość od tej kotwicy pozostanie stała.

69
00:05:27,560 --> 00:05:29,990
‫I możemy zmienić kotwicę, jeśli chcemy.

70
00:05:30,020 --> 00:05:35,690
‫Na przykład możemy ustawić nasz widżet tekstowy względem kotwicy na środku ekranu, przechodząc

71
00:05:35,690 --> 00:05:39,470
‫do panelu szczegółów i pod slotem widzimy kotwice.

72
00:05:39,470 --> 00:05:45,500
‫A jeśli kliknę menu, mogę wybrać tę ikonę, która ma kwadrat pośrodku.

73
00:05:45,500 --> 00:05:51,080
‫Jeśli teraz to wybiorę, kotwica znajduje się na środku ekranu, a jeśli chcę, aby mój

74
00:05:51,080 --> 00:05:58,430
‫widżet był całkowicie wyśrodkowany, mogę zmienić jego pozycję X i Y tutaj w kategorii slotów, aby ustawić to na zero

75
00:05:58,430 --> 00:06:05,540
‫dla pozycji X i zero dla pozycji Y i przewijając kółkiem myszy, aby powiększyć, zobaczysz, że jest to lewy

76
00:06:05,540 --> 00:06:08,510
‫górny róg, tak jak na środku ekranu.

77
00:06:08,510 --> 00:06:17,180
‫Teraz to pole wyrównania tutaj pozwala nam to idealnie wyśrodkować, wybierając wartości 0. 54 X i 0. 54 Y, a teraz

78
00:06:17,180 --> 00:06:21,350
‫jest całkowicie wyśrodkowany na środku ekranu.

79
00:06:21,440 --> 00:06:28,250
‫Teraz, jeśli chodzi o widżet startowy, prawdopodobnie będzie właściwe umieszczenie tego tekstu nieco wyżej.

80
00:06:28,250 --> 00:06:35,840
‫Tak więc w przypadku pozycji Y mogę kliknąć i przeciągnąć to w lewo, co spowoduje, że wartość pozycji Y w edytorze

81
00:06:35,840 --> 00:06:40,250
‫schematu widżetu będzie ujemna, a oś y będzie skierowana w dół.

82
00:06:40,250 --> 00:06:46,250
‫Więc jeśli chcemy podnieść nasz widżet tekstowy, ustawimy tę pozycję y na niższą wartość.

83
00:06:46,250 --> 00:06:49,130
‫Umieszczę to tutaj około -300.

84
00:06:49,130 --> 00:06:55,460
‫Teraz w kategorii wyglądu mogę zmienić kilka właściwości tego tekstu.

85
00:06:55,460 --> 00:07:01,730
‫Jeśli kliknę menu rozwijane czcionki, mogę zmienić rozmiar czcionki, aby powiedzieć coś w stylu 42.

86
00:07:01,730 --> 00:07:04,070
‫Teraz czcionka zamiast pogrubienia.

87
00:07:04,070 --> 00:07:06,140
‫Podoba mi się zwykły krój pisma.

88
00:07:06,140 --> 00:07:07,970
‫Myślę, że teraz wygląda trochę lepiej.

89
00:07:07,970 --> 00:07:14,300
‫Zauważ, że tekst naszego widżetu tekstowego jest większy niż zielony prostokąt, ale możemy zmienić rozmiar tego

90
00:07:14,300 --> 00:07:15,230
‫zielonego prostokąta.

91
00:07:15,230 --> 00:07:22,010
‫A kiedy zmieniam prostokąt, zobaczysz w panelu szczegółów, że zmienia się rozmiar X i rozmiar

92
00:07:22,010 --> 00:07:22,880
‫y.

93
00:07:22,880 --> 00:07:26,270
‫Teraz zauważcie, że pozycja X nieco się przesunęła, odkąd ją zmieniłem.

94
00:07:26,270 --> 00:07:32,180
‫Mogę ustawić go z powrotem na zero, a ponieważ wyrównanie dla x wynosi 0. 5, jest idealnie wyśrodkowany.

95
00:07:32,180 --> 00:07:35,540
‫Więc teraz mam widżet z napisem Przygotuj się.

96
00:07:35,570 --> 00:07:40,400
‫Jedyne, co pozostało do zrobienia, to dodanie tego do rzutni, abyśmy mogli zobaczyć go na ekranie.

97
00:07:40,400 --> 00:07:46,370
‫Zauważysz, że jeśli nacisnę play i zacznę grać, to nie widziałem tego widżetu na ekranie.

98
00:07:46,370 --> 00:07:51,530
‫Dzieje się tak dlatego, że musimy aktywnie dodać to do ekranu i dlatego stworzyliśmy

99
00:07:51,530 --> 00:07:56,960
‫to możliwe do zaimplementowania wydarzenie w trybie gry, abyśmy mogli dodać ten widżet do ekranu tutaj.

100
00:07:56,960 --> 00:07:59,090
‫Porozmawiajmy więc o tym, jak to zrobić.

101
00:07:59,420 --> 00:07:59,840
‫Ale już.

102
00:07:59,840 --> 00:08:05,930
‫Sposobem na utworzenie widżetu z planów jest użycie węzła tworzenia widżetu.

103
00:08:05,960 --> 00:08:11,870
‫Możesz kliknąć prawym przyciskiem myszy na wykresie zdarzeń dla dowolnego planu i zacząć wpisywać nazwę węzła, a

104
00:08:11,870 --> 00:08:13,760
‫następnie wybrać ten konkretny węzeł.

105
00:08:13,790 --> 00:08:16,040
‫Potrzebujemy węzła do tworzenia widżetu.

106
00:08:16,040 --> 00:08:20,990
‫Teraz zobaczysz, że jest napisane Create Coolness Widget.

107
00:08:20,990 --> 00:08:27,020
‫A to dlatego, że jak tylko dodałem węzeł Create Widget, wybrałem klasę Widget Blueprint tutaj

108
00:08:27,020 --> 00:08:29,150
‫na liście rozwijanej klasy.

109
00:08:29,150 --> 00:08:34,340
‫Jest to konieczne, aby Unreal Engine wiedział, którą klasę widgetu utworzyć.

110
00:08:34,370 --> 00:08:40,880
‫Teraz, po użyciu węzła tworzenia widgetu, używamy węzła add to viewport, aby faktycznie dodać ten widget do

111
00:08:40,880 --> 00:08:45,290
‫okna widoku, a następnie możemy go zobaczyć na ekranie w grze.

112
00:08:45,320 --> 00:08:52,700
‫Zauważże przewody wykonawcze sąpodłączone oraz że węzeł tworzenia widżetu zwraca to niebieskie wyjście i powinno

113
00:08:52,700 --> 00:08:59,300
‫byćpołączone z docelowym wejściem w dodatku do rzutni ponieważ add to viewport musi

114
00:08:59,300 --> 00:09:06,290
‫wiedziećktóry widżet dodać do rzutni i do węzła tworzenia widżetów zwraca wartość tego widżetu.

115
00:09:06,290 --> 00:09:11,570
‫Więc teraz, kiedy już wiesz, jak stworzyć widget w planach, przejdziesz do klasy trybu gry

116
00:09:11,570 --> 00:09:14,960
‫BP tune Tanks i użyjesz węzła tworzenia widgetu.

117
00:09:14,990 --> 00:09:20,390
‫Zamierzasz podłączyć to z naszego projektu, który można wdrożyć w celu wykonania zdarzenia.

118
00:09:20,500 --> 00:09:21,910
‫Nazwaliśmy Start Game.

119
00:09:21,910 --> 00:09:29,800
‫Teraz w węźle Utwórz widżet musimy wybrać klasę widżetu do utworzenia, więc wybierz widżet startowy WB, ten nowy projekt

120
00:09:29,800 --> 00:09:36,700
‫widżetu, który właśnie utworzyliśmy, a następnie użyj węzła add to viewport, aby faktycznie dodać ten nowy

121
00:09:36,700 --> 00:09:40,960
‫widżet do rzutni i zaczepu w górę przewodów wykonawczych.

122
00:09:40,960 --> 00:09:47,560
‫I nie zapomnij podłączyć wartości zwracanej z widżetu create do docelowego wejścia w add do viewport.

123
00:09:47,560 --> 00:09:52,900
‫Zatrzymaj więc wideo i dodaj teraz te węzły do schematu trybu gry czołgu tuningowego.

124
00:09:56,670 --> 00:10:03,090
‫Więc jestem tutaj w tunezji Tanks Game Mode Blueprint i mam zamiar kliknąć prawym przyciskiem myszy i wpisać

125
00:10:03,090 --> 00:10:05,700
‫widżet tworzenia i wybrać Utwórz węzeł widżetu.

126
00:10:05,730 --> 00:10:07,830
‫Teraz zauważ, że jest napisane Brak konstrukcji.

127
00:10:07,830 --> 00:10:12,930
‫A to dlatego, że będzie to mówić, dopóki nie wybierzemy odpowiedniej klasy widżetu z listy rozwijanej

128
00:10:12,930 --> 00:10:13,600
‫klasy.

129
00:10:13,620 --> 00:10:18,210
‫Ale zanim to zrobię, zamierzam podłączyć przewód egzekucyjny z wydarzeń rozpoczynających grę.

130
00:10:18,210 --> 00:10:24,720
‫Tak więc faktycznie wykonujemy tę funkcję, gdy tylko nasza gra uruchamiająca zdarzenia, którą można wdrożyć,

131
00:10:24,720 --> 00:10:26,700
‫zostanie wywołana z C++.

132
00:10:26,970 --> 00:10:34,830
‫Teraz dla listy rozwijanej klasy wybiorę widżet gry startowej WP, a teraz tytuł węzła zmienia

133
00:10:34,830 --> 00:10:38,700
‫się na Stwórz widżet gry startowej WP.

134
00:10:38,820 --> 00:10:41,880
‫Teraz widzimy, że jest to węzeł tworzenia widżetu.

135
00:10:41,910 --> 00:10:48,660
‫Teraz kliknę w przewód wykonawczy i przeciągnę, a następnie wpiszę add to viewport.

136
00:10:48,660 --> 00:10:54,720
‫A potem, jeśli wybiorę add to viewport, to przewody wykonawcze są automatycznie podłączane dla mnie,

137
00:10:54,720 --> 00:11:01,410
‫ale nie łączy to wartości zwracanej z create widget do docelowego wejścia w celu dodania do viewport.

138
00:11:01,410 --> 00:11:04,070
‫Więc muszę to kliknąć i przeciągnąć sam.

139
00:11:04,080 --> 00:11:10,920
‫Więc teraz, gdy Start Game zostanie wywołany z C++ i klasy trybu gry, wykonamy tę

140
00:11:10,920 --> 00:11:18,330
‫logikę planu, która spowoduje utworzenie nowego widżetu opartego na widżecie WP Start Game, a następnie dodamy go

141
00:11:18,330 --> 00:11:19,500
‫do widoku.

142
00:11:19,500 --> 00:11:23,220
‫Więc kliknę Play i jest widżet Przygotuj się.

143
00:11:23,400 --> 00:11:29,550
‫Teraz wspomnieliśmy, że będzie to pokazywać licznik czasu, ale nie zaimplementowaliśmy jeszcze tej

144
00:11:29,550 --> 00:11:32,220
‫funkcji, więc to już wkrótce.

145
00:11:32,490 --> 00:11:39,090
‫Podsumowując, stworzyliśmy schemat Start Game Widget Blueprint i na razie zawiera on tylko tekst z napisem

146
00:11:39,090 --> 00:11:39,930
‫Przygotuj się.

147
00:11:40,260 --> 00:11:46,740
‫Użyliśmy również węzła tworzenia widżetu i węzła dodawania do widoku, aby dodać ten widżet do widoku, abyśmy mogli go

148
00:11:46,740 --> 00:11:48,990
‫zobaczyć, gdy tylko rozpocznie się gra.

149
00:11:48,990 --> 00:11:55,620
‫Zainicjowaliśmy tę funkcję za pomocą naszego możliwego do wdrożenia zdarzenia, które stworzyliśmy w trybie gry w

150
00:11:55,620 --> 00:12:02,460
‫klasie C++ o nazwie Start Game w nadchodzących filmach. Zmienimy tekst w tym widżecie w czasie

151
00:12:02,460 --> 00:12:09,270
‫wykonywania, aby pokazywał, ile czasu pozostało na tym liczniku czasu rozpoczęcia gry, aby gracz wiedział, ile

152
00:12:09,270 --> 00:12:13,140
‫czasu musi odczekać, zanim będzie mógł rozpocząć grę.

153
00:12:13,860 --> 00:12:14,850
‫Zobaczymy się wkrótce.

