﻿1
00:00:04,270 --> 00:00:05,200
‫Merhaba ve hoş geldiniz.

2
00:00:05,200 --> 00:00:10,060
‫Bu derste gevşek bir ekran görüntüleyeceğiz ve bu widget'ı oluşturmak

3
00:00:10,060 --> 00:00:13,870
‫için bunu tamamen C++ içinden yapacağız.

4
00:00:13,870 --> 00:00:15,490
‫Hadi içeri dalalım ve nasıl yapıldığını görelim.

5
00:00:16,150 --> 00:00:21,640
‫Bu yüzden, oyuncumuz öldüğünde ona neler olup bittiğini, kaybettiğini ve seviyenin sıfırlanmak üzere olduğunu söylemek için bazı kullanıcı

6
00:00:21,640 --> 00:00:23,260
‫arayüzleri görüntülemek istiyoruz.

7
00:00:23,260 --> 00:00:25,240
‫Bu yüzden onlar için sürpriz olmadı.

8
00:00:25,240 --> 00:00:31,990
‫Bu yüzden bir UI, bir UI widget'ı, bir UMG, gerçek dışı hareketli grafik widget'ı oluşturmamız gerekecek.

9
00:00:32,350 --> 00:00:35,830
‫Öncelikle UI'yi depolamak için bir klasör oluşturarak bunu yapalım.

10
00:00:35,830 --> 00:00:41,470
‫Ve zaten iki UI öğemiz olacağını biliyorum, bu yüzden sanırım burada bir UI klasörüm olacak ve sonra

11
00:00:41,470 --> 00:00:47,800
‫buraya girip sağ tıklayalım ve sonra gidelim, bunu daha önce yapmalıydınız, ama hadi size yol göstereyim.

12
00:00:48,070 --> 00:00:52,600
‫Kullanıcı arayüzü bölümüne gideceğiz, ardından widget blueprint'ini seçeceğiz

13
00:00:52,600 --> 00:00:57,130
‫ve kullanacağımız önek WP alt çizgisi ve ardından lose screen olacak.

14
00:00:57,430 --> 00:01:03,520
‫Şimdi C++'da bu tür şeyler için bazı temel sınıflar yapabilirsiniz, ancak bu bölümde bunu ele almayacağız.

15
00:01:03,520 --> 00:01:07,480
‫Bunu yapmak genellikle gerekli değildir ve bu tür şeyleri Blueprint'te yapmak çok daha kolaydır.

16
00:01:07,480 --> 00:01:13,000
‫Çok karmaşık bir kullanıcı arayüzüne sahip değilseniz ve bu kullanıcı arayüzü mantığının bir kısmını C++'a yerleştirmek istemiyorsanız,

17
00:01:13,000 --> 00:01:15,850
‫bunu C++'ta yapmanın pek bir avantajı yoktur.

18
00:01:15,850 --> 00:01:20,560
‫Bu durumda, durum böyle değildir, bu yüzden devam edebilir ve planları kullanabiliriz.

19
00:01:20,560 --> 00:01:22,510
‫Sonuçta kullanıcı arayüzü görsel bir şeydir.

20
00:01:22,510 --> 00:01:29,500
‫Şimdi bir araya getirmek için görsel bir araç kullanmak mantıklı çünkü widget'ların nasıl oluşturulacağını zaten biliyorsunuz.

21
00:01:29,500 --> 00:01:32,860
‫O zaman bunu size bir kaybetme ekranı oluşturmanız için bir meydan okuma olarak vereceğim.

22
00:01:32,860 --> 00:01:37,180
‫Oyuncunun kaybettiğini ve yeniden başlatmak üzere olduğumuzu açıklayan bir metin eklemek istiyoruz.

23
00:01:37,240 --> 00:01:42,040
‫Bu metni muhtemelen ortalayacak şekilde konumlandırmak, görünür kılmak ve oyunda görünür olduğundan emin olmak istiyorum.

24
00:01:42,040 --> 00:01:45,610
‫Yine de, dediğim gibi, yakında yeniden başlatma olacağını açıklayın.

25
00:01:45,730 --> 00:01:50,500
‫Ve bu zorluğu denedikten sonra, bunu C++'dan nasıl ortaya çıkarabileceğimize bakacağız.

26
00:01:50,500 --> 00:01:53,020
‫Bunun Blueprint'te nasıl yapıldığını daha önce görmüş olabilirsiniz.

27
00:01:53,020 --> 00:01:55,690
‫Bunu C++ içinde nasıl yapabileceğimizi göreceğiz.

28
00:01:55,690 --> 00:01:57,070
‫Videoyu durdurun ve bir deneyin.

29
00:01:57,160 --> 00:01:58,420
‫Tamam, tekrar hoş geldin.

30
00:01:58,600 --> 00:02:03,340
‫Şimdi gidip öncelikle bir metin oluşturacağım.

31
00:02:03,340 --> 00:02:09,400
‫Bu yüzden sol taraftaki palette metin öğesini aramak ve onu getirmek istiyorum.

32
00:02:10,090 --> 00:02:17,270
‫Burada oldukça basit ve yaratıcı olmayan diyalog yazısını kaybedersiniz olarak değiştireceğim ve kaybettiklerini

33
00:02:17,290 --> 00:02:22,900
‫çok net hale getirmek için rengi, opaklığı ve / veya görünümü kırmızıya çevireceğiz.

34
00:02:22,900 --> 00:02:28,090
‫Ve sadece biraz daha ovalayın ve yazı tipimizi genişletip boyutunu daha büyük olacak şekilde değiştireceğim.

35
00:02:28,090 --> 00:02:35,320
‫Sonra metnimizin etrafındaki kutuyu genişleteceğim ve metnimizi ortalayacağım.

36
00:02:35,320 --> 00:02:38,080
‫Gerekçelendirmeye giderek, metinde bir çizgiyi ortalayacağım.

37
00:02:38,080 --> 00:02:44,890
‫Ve eğer genişletirsem, not içinde ortalanmış hizalama yapabileceğim başka bir yer olup olmadığına bakalım.

38
00:02:44,890 --> 00:02:52,720
‫Bu yüzden gidip kutu boyutunu kabaca uygun hale getireceğim ve sonra hizalamama ve çapalarıma ve bunun

39
00:02:52,720 --> 00:02:55,150
‫gibi şeylere gideceğim.

40
00:02:55,450 --> 00:03:02,080
‫Sabitleyiciler için açılır menüyü seçeceğim ve ortaya sabitleme için ön ayarı seçeceğim çünkü yapmak

41
00:03:02,080 --> 00:03:03,370
‫istediğim şey bu.

42
00:03:03,790 --> 00:03:12,430
‫Hizalamamı 0 olarak ayarlamak istiyorum. 5 ve 0. 5, bu da temel olarak sol üst köşe yerine nesnenin merkezine

43
00:03:12,430 --> 00:03:14,530
‫hizaladığımız anlamına gelir.

44
00:03:14,770 --> 00:03:16,690
‫Çapayı tekrar yapacağım.

45
00:03:16,690 --> 00:03:16,930
‫Tamam.

46
00:03:16,930 --> 00:03:19,060
‫Bu pek yardımcı olmadı.

47
00:03:19,390 --> 00:03:24,520
‫Ve sonra X pozisyonunu sıfır ve sıfırın yanına ayarlarsam, çünkü çapalarımı bu şekilde

48
00:03:24,520 --> 00:03:29,260
‫ayarladım, o zaman kaybetme pozisyonum ortada bir yerde olacak ve ben sadece onu

49
00:03:29,260 --> 00:03:31,300
‫biraz yukarı taşıyacağım.

50
00:03:31,300 --> 00:03:38,200
‫X konumumu sıfırda, Y konumumu -50'de tutun, çünkü bazı ikincil metinler eklemek istiyorum, aslında diğer metni

51
00:03:38,200 --> 00:03:43,090
‫burada çoğaltmak daha kolay olabilir çünkü zaten ihtiyacım olan tüm kuruluma

52
00:03:43,090 --> 00:03:43,930
‫sahip.

53
00:03:43,930 --> 00:03:46,060
‫Sadece biraz daha küçültmek istiyorum.

54
00:03:46,060 --> 00:03:54,160
‫Tekrar sıfırı konumlandırın ve seviyenin 5 saniye içinde yeniden başlayacağını söyleyeceğim ve bu yazı tipi boyutunu çok daha küçük

55
00:03:54,160 --> 00:03:55,270
‫yapacağım.

56
00:03:55,270 --> 00:04:00,460
‫Böylece daha az gözünüzün önünde olur, bunun gibi bir şey ve sonra sadece biraz aşağı kaydırın,

57
00:04:00,460 --> 00:04:05,950
‫küçük bir çentik ve X konumunu sıfıra sıfırlamaya devam edin ve konumlandırmadan %100 memnun olun.

58
00:04:05,950 --> 00:04:08,560
‫Sadece biraz daha yükselteceğim.

59
00:04:08,560 --> 00:04:14,050
‫Shift tuşunu basılı tutarsam, hareket ettiğim eksene kilitleyebilirim, böylece aşağı yukarı bu şekilde merkezi

60
00:04:14,050 --> 00:04:14,560
‫olur.

61
00:04:14,590 --> 00:04:15,640
‫Tamam, bundan memnunum.

62
00:04:15,640 --> 00:04:18,940
‫Şimdi gidip o şeyi ortaya çıkarmaya çalışmalıyız.

63
00:04:18,970 --> 00:04:19,870
‫Bunu nasıl yapacağız?

64
00:04:19,870 --> 00:04:25,210
‫Her şeyden önce, hangi widget sınıfını ortaya çıkarmamız gerektiğini ve bundan sonra bunu nerede

65
00:04:25,210 --> 00:04:27,520
‫yapacağımızı bilmemiz gerekir.

66
00:04:27,520 --> 00:04:31,870
‫Daha önce de söylediğim gibi, bunu yapmak için iyi bir yerin oyuncu kumandasının kendisi olduğunu düşünüyorum.

67
00:04:32,200 --> 00:04:38,030
‫Ve oyuncu denetleyicisinde hangi sınıfı, hangi widget sınıfını ortaya çıkarmaya çalıştığımızı bilmemiz gerekecek.

68
00:04:38,030 --> 00:04:42,670
‫Şimdi, bunun bir blueprint sınıfı olduğunu biliyorum, ancak yine de ortaya çıkarmaya çalıştığımız bir sınıf olması gerekiyor.

69
00:04:43,000 --> 00:04:48,880
‫Bunu yapmanın yolu, burada herhangi bir yerde düzenlenebilecek yeni bir özellik oluşturmaktır

70
00:04:48,880 --> 00:04:55,990
‫ve bunun bir alt sınıf olmasını isteyeceğiz çünkü bu her zaman yeni bir sınıf elde ettiğimizden emin olmanın iyi

71
00:04:55,990 --> 00:04:57,250
‫bir yoludur.

72
00:04:57,250 --> 00:05:04,270
‫Temel olarak, isterseniz type you sınıfını kullanabilirsiniz, ancak bu ne tür bir sınıf kullanabileceğimizi

73
00:05:04,270 --> 00:05:05,350
‫kısıtlamaz.

74
00:05:05,350 --> 00:05:09,790
‫Ve burada bunu yalnızca bir widget kullanmanızla sınırlamak istiyoruz.

75
00:05:09,790 --> 00:05:17,390
‫Planınıza giderseniz, burada bir yere gidersek, oraya gittiğinizi görebilirsiniz.

76
00:05:17,410 --> 00:05:22,930
‫Ana sınıf, üzerine önek koyduğunuzda bir widget kullandığınızı bildiğimiz bir widget kullanır.

77
00:05:23,050 --> 00:05:26,680
‫Yani bu bir alt sınıf.

78
00:05:27,490 --> 00:05:34,360
‫Ve sonra açılı parantezlerimizi bir widget kullandığınız bir sınıf olarak kullanacağız ve aslında herhangi

79
00:05:34,360 --> 00:05:40,150
‫bir include yapmak yerine bunu burada bildireceğim, bu yüzden bir widget kullandığınız sınıf

80
00:05:40,150 --> 00:05:46,630
‫ve sonra orada neler olup bittiğini gerçekten açık tutmak için buna lose screen sınıfı diyeceğiz.

81
00:05:47,020 --> 00:05:54,400
‫Şimdi devam edeceğim ve sonraki işlemleri yaparken bu aşamada derleyeceğim çünkü bir başlık dosyasını değiştirirken derlemek

82
00:05:54,400 --> 00:05:56,710
‫sadece biraz daha uzun sürer.

83
00:05:56,710 --> 00:06:02,860
‫Şimdi aslında derleme bu aşamada başarısız olacaktır çünkü UMG modülünü dahil etmedik.

84
00:06:02,860 --> 00:06:03,820
‫Bunu nasıl yapacağımızı bilmiyoruz.

85
00:06:03,820 --> 00:06:09,760
‫Bu aşamada derleme konusunda endişelenmeyin ve videonun yaklaşık 9. dakikasında bu hatayı düzelteceğiz.

86
00:06:10,060 --> 00:06:14,560
‫Şimdi C++'da, yapmak istediğimiz şey aslında bu widget'ı ortaya çıkarmak.

87
00:06:14,560 --> 00:06:17,290
‫Bu yüzden bunu belki de zamanından önce yapmak isteyeceğiz.

88
00:06:17,290 --> 00:06:20,320
‫Gerçekten önemli değil çünkü zamanlayıcı beklemiyor.

89
00:06:20,320 --> 00:06:24,820
‫Sadece zamanı ayarlar ve ardından doğrudan bir sonraki kod satırına geçer, böylece bunu düz bir şekilde yaparsak 5 saniye

90
00:06:24,820 --> 00:06:29,110
‫beklemeyiz, eğer kullanıcı arayüzünü hemen sonra ortaya çıkarırsak, bunu hangi sırada yaptığımızın gerçekten bir

91
00:06:29,110 --> 00:06:29,860
‫önemi yoktur.

92
00:06:30,220 --> 00:06:36,520
‫Bu yüzden yapmak istediğimiz şey, şu anda mevcut olmayan create widget adlı bir işlevi kullanmaktır.

93
00:06:36,520 --> 00:06:38,980
‫Bu yüzden önce bir şey eklememiz gerekiyor.

94
00:06:38,980 --> 00:06:45,850
‫Ve dahil edeceğimiz şey blueprint forward slash user widget ve bu widget oluşturma

95
00:06:45,850 --> 00:06:50,260
‫fonksiyonuna erişmek için ihtiyacımız olan sınıf.

96
00:06:50,740 --> 00:06:53,620
‫Ve temel olarak widget oluştur diyeceğiz.

97
00:06:53,620 --> 00:06:58,270
‫Aslında, bunu sağlamak için neye ihtiyacımız olduğuna bir bakalım.

98
00:06:58,270 --> 00:07:00,910
‫F 12'yi uygulamaya koyacağım.

99
00:07:00,910 --> 00:07:07,330
‫Biraz karmaşık olduğunu görebilirsiniz, ancak burada bir şablon parametremiz var, bu temelde varsayılan olarak bir widget

100
00:07:07,330 --> 00:07:11,080
‫kullanıyorsunuz, bu yüzden muhtemelen bunu sağlamamız gerekmiyor.

101
00:07:11,590 --> 00:07:19,390
‫Ve sonra sahip olunan nesne ve oluşturmamız gereken sınıf ve daha sonra sağlamamız gerekmeyen bir widget

102
00:07:19,390 --> 00:07:23,830
‫adı vardır ve daha sonra widget'a işaretçi olarak döner.

103
00:07:24,040 --> 00:07:29,200
‫Aslında burada yapacağım şey, ona bir sahip nesnesi vermek olacak.

104
00:07:29,200 --> 00:07:31,560
‫Artık widget'a yalnızca belirli şeyler sahip olabilir.

105
00:07:31,580 --> 00:07:36,310
‫Bu şeylerden biri aslında oyuncu kontrolörüdür, bu yüzden sadece bunu geçirebiliriz.

106
00:07:36,310 --> 00:07:40,750
‫Bir sonraki şey, bir widget kullandığınızda RT alt sınıfını geçmek istememizdir.

107
00:07:40,750 --> 00:07:46,540
‫Neyse ki bunu başlık dosyasında zaten yapılandırdık, bu yüzden devam edip bunu içeri aktarabiliriz ve

108
00:07:46,540 --> 00:07:52,150
‫satırın sonuna noktalı virgül koymadığım halde girintimin kendini düzeltmeye çalışmasını durduracağım

109
00:07:52,150 --> 00:07:55,420
‫ve sonra gidip başka neler olduğuna bir bakalım.

110
00:07:55,420 --> 00:07:56,050
‫İşte bu kadar.

111
00:07:56,050 --> 00:07:58,540
‫Bu noktada sadece widget'ı döndürür.

112
00:07:58,540 --> 00:08:06,910
‫Yapabileceğimiz şey size bir işaretçi göstermek, bir widget yıldızı kullanmak ve bu bizim kaybetme ekranımız olacak.

113
00:08:06,910 --> 00:08:09,310
‫Bu yüzden ekran kaybetme dersimiz vardı.

114
00:08:09,310 --> 00:08:13,000
‫Widget'ı oluşturduktan sonra, gerçek bir gevşek ekran haline gelir.

115
00:08:13,000 --> 00:08:16,060
‫Yapmamız gereken bir sonraki şey bu kullanıcı arayüzünü görünür hale getirmek.

116
00:08:16,060 --> 00:08:20,020
‫Bunu, gerçek olmayan bir deyişle görüntü alanına ekleyerek yaparız.

117
00:08:20,020 --> 00:08:25,510
‫Ama önce, mavi ekranda bir fonksiyon çağırarak görüntü alanına ekleme yaptığımız için, bunun null pointer olmadığından

118
00:08:25,510 --> 00:08:27,100
‫emin olmamız gerekir.

119
00:08:27,100 --> 00:08:32,410
‫Peki kayıp ekran null pointer'a eşit değilse, neden null pointer olabilir?

120
00:08:32,410 --> 00:08:36,760
‫Bu arada, size küçük bir meydan okuma, bakalım burada neden bir null pointer ile sonuçlanabileceğimizi bulabilecek

121
00:08:36,760 --> 00:08:37,210
‫misiniz?

122
00:08:37,600 --> 00:08:41,200
‫Bunun bir nedeni belki de ekran kaybetme sınıfını ayarlamayı unutmuş olmamızdır.

123
00:08:41,200 --> 00:08:46,180
‫Ve eğer durum buysa ve geçerli bir mavi ekran sınıfı setimiz yoksa, o zaman create widget bizim için sadece

124
00:08:46,180 --> 00:08:47,860
‫null pointer döndürecektir.

125
00:08:47,860 --> 00:08:54,340
‫Bunun olmasını istemeyiz ve kesinlikle null pointer üzerinde bir fonksiyon çağırmak istemeyiz.

126
00:08:54,340 --> 00:08:56,500
‫Bu yüzden ekran okunu kaybedeceğiz.

127
00:08:56,740 --> 00:09:01,270
‫Ve sonra burada istediğimiz şey viewport'a ekle adlı bir işlevdir.

128
00:09:02,060 --> 00:09:07,820
‫Bu da basitçe bunu yapacak, gidip ekrana ekleyecek ve böylece bu gevşek ekranı görebileceğiz.

129
00:09:08,090 --> 00:09:14,780
‫Şimdi, devam edip bunu da derleyeceğim ve bir makaraya gidip oyuncu denetleyicisi

130
00:09:14,780 --> 00:09:17,330
‫için planımızı açacağım.

131
00:09:17,330 --> 00:09:19,100
‫Yani atıcı oyuncu kontrolörü burada.

132
00:09:19,550 --> 00:09:25,520
‫Ve burada bir yerde henüz ortaya çıkmamış bir değişken görebilmeliyiz.

133
00:09:25,640 --> 00:09:27,110
‫Belki de bazı derleme hatalarım vardı.

134
00:09:27,110 --> 00:09:28,850
‫Gidip mesaj günlüğüne bir göz atalım.

135
00:09:29,180 --> 00:09:36,140
‫Evet, burada birkaç derleme hatası görebiliyoruz, yani harici sembollerin eksik olmasıyla ilgili bu garip hatalar.

136
00:09:36,140 --> 00:09:41,780
‫Sizinle ilgili bir şeyler söyleyen küçük bir görünümümüz varsa, şimdi mevcut olmayan bir widget kullanın,

137
00:09:41,780 --> 00:09:49,520
‫zihninizi birkaç ders öncesine geri götürürseniz, bu tür hataların bir modül bağımlılığını kaçırdığımızda olma eğiliminde olduğunu

138
00:09:49,520 --> 00:09:50,840
‫biliyoruz.

139
00:09:50,840 --> 00:09:57,770
‫Şimdi gidip basit shooter dot build dot CSS'imizi açarsak ve biraz daha fazla alan için terminali kapatırsam,

140
00:09:57,770 --> 00:10:04,370
‫yapmamız gereken şeyin buraya yeni bir genel bağımlılık eklemek olduğunu görebilirsiniz.

141
00:10:04,580 --> 00:10:12,140
‫Bunun sonuna UMG için bir genel bağımlılık ekleyeceğiz, yani yeni bir virgül.

142
00:10:12,140 --> 00:10:20,600
‫Tırnak içine UMG yazacağız ve bu da temel olarak burada sahip olduğumuz include, yani blueprint forward slash kullanıcı

143
00:10:20,600 --> 00:10:24,380
‫widget'ını kullanmamızı sağlayacak.

144
00:10:24,680 --> 00:10:28,700
‫Tüm bu şeyler, dahil olan standart şeylerden ayrı bir modüldedir.

145
00:10:28,700 --> 00:10:32,690
‫Bu yüzden gidip Unreal'a bu modülü C++'ımızda kullanmak istediğimizi söylememiz gerekiyor.

146
00:10:32,690 --> 00:10:34,640
‫Devam edip inşa edelim ve çalışıp çalışmadığını görelim.

147
00:10:34,640 --> 00:10:36,410
‫İşte bu başarılı görünüyor.

148
00:10:36,410 --> 00:10:42,500
‫Editöre gidip atıcı oyun denetleyicimize geri dönersek, bazı nedenlerden dolayı düzgün bir şekilde yeniden yüklendiğini

149
00:10:42,500 --> 00:10:46,340
‫sanmıyorum, bu yüzden burada editörde derlemeye basmak zorunda kaldım.

150
00:10:46,340 --> 00:10:48,430
‫Şimdi atıcı oyuncu kumandasına geri dönüyoruz.

151
00:10:48,430 --> 00:10:50,630
‫Sonunda ekran sınıfını kaybettiğinizi görebilirsiniz.

152
00:10:50,850 --> 00:10:57,830
‫Oradaki açılır menüye tıklayıp AWP'yi seçebilir, alt çizgi ekranını kaybedebilir, derleyebilir, kaydedebilir

153
00:10:57,830 --> 00:11:00,140
‫ve gidip kendimizi öldürtebiliriz.

154
00:11:00,140 --> 00:11:01,900
‫Birkaç kez vurulacağız.

155
00:11:01,910 --> 00:11:03,380
‫Bam, bam.

156
00:11:03,380 --> 00:11:04,250
‫Ve işte oldu.

157
00:11:04,250 --> 00:11:09,320
‫Lou ekranımız açıldı ve bize neler olduğunu, seviyenin 5 saniye içinde yeniden başlayacağını söyledi.

158
00:11:09,320 --> 00:11:10,220
‫Ve öyle de oldu.

159
00:11:10,220 --> 00:11:11,270
‫Öyle.

160
00:11:11,270 --> 00:11:20,030
‫Artık sadece UMG grafiklerini nasıl oluşturabileceğinizi değil, aynı zamanda bunları Blueprint yerine C++'dan nasıl üretebileceğinizi

161
00:11:20,030 --> 00:11:22,070
‫de biliyorsunuz.

162
00:11:22,070 --> 00:11:26,960
‫Bir sonraki derste, olaylara daha az kötümser bakacağız ve bu maç için de bazı kazanma

163
00:11:26,960 --> 00:11:30,680
‫koşulları yaratıp yaratamayacağımızı deneyeceğiz.

164
00:11:30,680 --> 00:11:31,550
‫Orada görüşürüz.

