﻿1
00:00:04,550 --> 00:00:11,000
‫Bu derste, oyun modundan oyunun sona erdiği bilgisini alacak ve oyuncu öldükten sonra

2
00:00:11,000 --> 00:00:18,140
‫5 saniye sonra seviyeyi yeniden yükleyen bu yeniden başlatma davranışını yaratacak bir oyuncu

3
00:00:18,140 --> 00:00:21,050
‫denetleyicisi oluşturacağız.

4
00:00:21,050 --> 00:00:22,730
‫Hadi içeri dalalım ve nasıl yapıldığını görelim.

5
00:00:23,360 --> 00:00:30,710
‫Dolayısıyla, oyun gerçekten bittiğinde, oyuncu denetleyicimize bildirimde bulunmamız ve ayrıca C++'mızda bir oyuncu denetleyicisine

6
00:00:30,710 --> 00:00:38,000
‫sahip olmamız gerekir, böylece seviyeyi yeniden başlatmamıza izin verme davranışını uygulayabiliriz.

7
00:00:38,210 --> 00:00:44,360
‫Yapılacak ilk şey, bu nokta öldürüldüğünde, her şeyden önce, ayrım gözetmeksizin günlüğe kaydediyoruz.

8
00:00:44,360 --> 00:00:48,200
‫Oyunun bitip bitmediğini kontrol etmek istiyoruz.

9
00:00:48,200 --> 00:00:50,390
‫Şimdi, iki senaryo var.

10
00:00:50,390 --> 00:00:52,730
‫Biri kazandığımız, diğeri kaybettiğimiz yer.

11
00:00:52,760 --> 00:00:55,580
‫Kaybetmek ilk ele alacağım konu çünkü en kolayı.

12
00:00:55,580 --> 00:00:58,220
‫Öldürülen piyon kaybettiğiniz oyuncuysa, bu kadar.

13
00:00:58,220 --> 00:01:04,850
‫Bu oyun modunun farklı yinelemeleriyle birden fazla cana sahip olmayı seçebilirsiniz, ancak ben bunu yapmayacağım.

14
00:01:04,850 --> 00:01:06,170
‫Sadece bekar bir hayatım olacak.

15
00:01:06,170 --> 00:01:07,520
‫Eğer ölürsen, oyun biter.

16
00:01:07,520 --> 00:01:08,900
‫Yeniden başlatmak isteyebilirsiniz.

17
00:01:09,320 --> 00:01:13,640
‫Peki bu piyonun bir oyuncu kontrolörü olup olmadığını nasıl kontrol edeceğiz?

18
00:01:13,670 --> 00:01:14,990
‫Bu oldukça açık.

19
00:01:14,990 --> 00:01:22,700
‫Sadece bir cast yapabiliriz, bu yüzden bir oyuncu denetleyicisine ve öldürülen piyon için bir cast yapacağız.

20
00:01:22,700 --> 00:01:25,340
‫Ve sonra eğer bu null değilse.

21
00:01:25,340 --> 00:01:32,810
‫Şimdi bir işaretçi alalım, bir oyuncu denetleyicisi işaretçisi, ona oyuncu denetleyicisi diyelim ve bu işaretçinin sonucunu

22
00:01:32,810 --> 00:01:34,490
‫burada saklayalım.

23
00:01:34,490 --> 00:01:42,890
‫Ve temel olarak eğer bu null değilse diyeceğiz, yani eğer oyuncu denetleyicisi null işaretçi değilse, o zaman ölenin

24
00:01:43,190 --> 00:01:47,540
‫oyuncu olduğunu ve oyuncu için oyunun bittiğini biliyoruz.

25
00:01:47,630 --> 00:01:52,100
‫Yapmak istediğimiz şey, bu oyuncu denetleyicisi yöntemini çağırmaktır.

26
00:01:52,100 --> 00:01:57,500
‫Bir oyun bitti yöntemi olduğunu zaten ima etmiştik.

27
00:01:57,500 --> 00:01:58,460
‫Şuna bir göz atalım.

28
00:01:58,460 --> 00:02:06,530
‫Eğer bir P kontrolü yaparsak ve oyuncu kontrolörüne bakarsak ve bir oyun sona erdi arayacak olursak, burada

29
00:02:06,530 --> 00:02:14,780
‫oyun sona erdi adında sanal bir yöntem olduğunu ve bir oyun sonu odağı olduğunu görebilirsiniz.

30
00:02:14,780 --> 00:02:19,070
‫Varsayılan olarak oyunun sonunda hangi aktöre odaklanmalıyız, bu null pointer'dır ve muhtemelen kullanacağımız

31
00:02:19,070 --> 00:02:19,970
‫şey de budur.

32
00:02:20,690 --> 00:02:22,910
‫Ve sonra diyeceğiz ki, kazanan bu mu?

33
00:02:22,910 --> 00:02:28,340
‫Temel olarak, oyuncunun kontrol etmesine ve kazanıp kazanmadığını bilmesine izin vermelisiniz.

34
00:02:28,340 --> 00:02:31,760
‫Ve bu durumda bunu söylemek oldukça kolaydır.

35
00:02:31,760 --> 00:02:33,050
‫Hayır, yapmadılar.

36
00:02:33,140 --> 00:02:41,480
‫Bu yüzden bir oyun denetleyicisi yapacağız ok oyunu sona erdi, sonra oyun sonu odağı için null pointer

37
00:02:41,480 --> 00:02:47,540
‫koyacağım çünkü bu özelliğe gerçekten ihtiyacımız yok ve sonra kazanan.

38
00:02:47,540 --> 00:02:49,430
‫Bu basitçe yanlış olacak.

39
00:02:49,430 --> 00:02:53,540
‫Bu kazanan oyun kumandası değil çünkü az önce ölen kumanda.

40
00:02:54,370 --> 00:02:56,950
‫Şimdi sizin için biraz zorlu bir görevin uygulama zamanı.

41
00:02:56,950 --> 00:02:59,710
‫Oyun bir oyun kumandasında sona erdi.

42
00:02:59,860 --> 00:03:06,940
‫Bu, bir C++ oyuncu denetleyicisi oluşturmamız, blueprint alt sınıfını oluşturmamız, oyun modumuzdan varsayılan olarak bu blueprint

43
00:03:06,940 --> 00:03:12,530
‫alt sınıfını ortaya çıkarmamız ve ardından devam edip geçersiz kılmamız gerektiği anlamına gelir.

44
00:03:12,550 --> 00:03:17,350
‫Oyun sona erdi ve gerçekten aldığımızı kontrol etmek için oraya bir günlük mesajı koyun.

45
00:03:17,350 --> 00:03:19,830
‫Bu oyun doğru zamanda sona erdi.

46
00:03:19,840 --> 00:03:21,220
‫Videoyu duraklatın ve deneyin.

47
00:03:21,250 --> 00:03:21,580
‫Tamam.

48
00:03:21,580 --> 00:03:22,260
‫Tekrar hoş geldiniz.

49
00:03:22,270 --> 00:03:29,740
‫Birinci adımda, C++ oyuncu denetleyicisini oluşturun, yeni bir C++ sınıfı oluşturun ve ardından gidip oyuncu denetleyicisini

50
00:03:29,740 --> 00:03:30,760
‫arayın.

51
00:03:30,760 --> 00:03:34,720
‫Sonra, buna atıcı oyuncu kontrolörü diyeceğiz.

52
00:03:34,750 --> 00:03:36,010
‫Devam edin ve bu sınıfı oluşturun.

53
00:03:36,010 --> 00:03:44,560
‫Bu tamamlandıktan sonra, planlarımıza gitmek ve buna dayalı bir plan sınıfı oluşturmak istiyoruz.

54
00:03:44,560 --> 00:03:50,680
‫Bu yüzden temel olarak atıcı oyuncu denetleyicisini seçmek istiyoruz ve buna bip alt çizgi atıcı

55
00:03:50,710 --> 00:03:53,200
‫oyuncu denetleyicisi diyeceğiz.

56
00:03:53,200 --> 00:03:57,580
‫Bu şu anda gerçekten gerekli değil, ancak daha sonra, bazı UI varlıklarını bu oyuncu denetleyicisine

57
00:03:57,580 --> 00:03:59,230
‫bağlamak isteyeceğiz.

58
00:03:59,230 --> 00:04:00,940
‫Yani orada hazır olacak.

59
00:04:01,150 --> 00:04:07,900
‫Sonra bip, daha fazla oyun moduna gideceğiz ve bunu yerleştireceğiz çünkü varsayılan oyuncu denetleyicisi sınıfını oyuncu

60
00:04:07,900 --> 00:04:13,150
‫denetleyicisinden bip alt çizgi atıcı oyuncu denetleyicimize değiştirmek istiyoruz.

61
00:04:13,450 --> 00:04:14,050
‫Güzel.

62
00:04:14,380 --> 00:04:18,280
‫O zaman oyunumuzun sona erdiğini geçersiz kılmak istiyoruz.

63
00:04:18,490 --> 00:04:21,430
‫Şimdi oyuncu denetleyicisine gidip gitmediğimize bakalım.

64
00:04:22,060 --> 00:04:24,550
‫Bunun herkese açık bölümde olduğunu görebiliyoruz.

65
00:04:24,550 --> 00:04:25,360
‫İmza burada.

66
00:04:25,360 --> 00:04:25,990
‫Kopyalayalım.

67
00:04:25,990 --> 00:04:31,390
‫Atıcı oyun denetleyicimiz H'ye gidin ve genel oluşturun.

68
00:04:32,170 --> 00:04:35,650
‫Bu sanal boşluğa oyun sona erdi.

69
00:04:35,650 --> 00:04:36,190
‫Güzel.

70
00:04:36,190 --> 00:04:40,210
‫Ve zaten bir geçersiz kılma işlemimiz var çünkü bu açıkça bir yerden bir yere geçersiz kılınmıştı.

71
00:04:41,160 --> 00:04:45,330
‫Daha sonra yapabileceğimiz şey, devam etmek ve bunu uygulamaktır.

72
00:04:45,340 --> 00:04:48,780
‫Süper hatırlamak için çağırmak istediğimiz kontrol kaydırması p.

73
00:04:49,790 --> 00:04:53,060
‫Ve biz de oyunu bu şekilde bitirmek istiyoruz.

74
00:04:53,870 --> 00:05:01,770
‫Ve oyun sonu odağında geçmek istiyoruz ve B kazanıyor ve sonra günlüğe kaydetmek istiyoruz.

75
00:05:01,790 --> 00:05:02,810
‫Yani kayıt yapıyorsun.

76
00:05:02,900 --> 00:05:04,280
‫Oradaki makromu kullan.

77
00:05:04,610 --> 00:05:07,240
‫İşimiz bitti.

78
00:05:07,250 --> 00:05:10,310
‫Sonunda çıkan günlük mesajı olacak.

79
00:05:10,310 --> 00:05:12,880
‫Şimdi derleyelim ve çalışıp çalışmadığını görelim.

80
00:05:12,890 --> 00:05:14,540
‫Çıktı günlüğüne gideceğiz.

81
00:05:14,690 --> 00:05:17,690
‫Oynat tuşuna bas, git ve öldür.

82
00:05:17,690 --> 00:05:23,480
‫Temel olarak sağlıklı yavaşça aşağı iniyor ve sonra bir mesaj görmeliyiz.

83
00:05:23,480 --> 00:05:24,530
‫Mesajı alıyor muyuz?

84
00:05:24,530 --> 00:05:24,920
‫Hayır.

85
00:05:24,920 --> 00:05:25,880
‫Bir bakalım.

86
00:05:25,880 --> 00:05:27,230
‫Buradaki oyuncu kontrolörü nedir?

87
00:05:27,230 --> 00:05:32,870
‫Bip alt çizgi atıcı oyuncu kumandası doğru kumanda gibi görünüyor.

88
00:05:32,870 --> 00:05:35,570
‫Geçersiz kılma oyunumuz sona erdi.

89
00:05:35,570 --> 00:05:37,250
‫Şimdi burada bir hata görüyorum.

90
00:05:37,250 --> 00:05:42,170
‫Şimdi, bazılarınızın fark etmiş olabileceği ve ekrana bağırıp çağırdığı bir

91
00:05:42,170 --> 00:05:47,900
‫şey var, burada döküm yaptığımız oyuncu denetleyicimiz var ve ben bunu oyuncunun gerçek

92
00:05:47,900 --> 00:05:49,760
‫-- ile karıştırıyorum.

93
00:05:49,760 --> 00:05:57,260
‫Yani burada yapmak istediğimiz şey, öldürülen kişinin kontrolörünü bulmak.

94
00:05:57,260 --> 00:06:05,030
‫Yani -- öldürülen nokta get controller Aron yani arrow get controller ve sonra bunu player controller'a atmak istiyoruz

95
00:06:05,030 --> 00:06:08,600
‫ve eğer bu null ise, tamam, bu çalışmalı.

96
00:06:08,600 --> 00:06:10,760
‫Öyleyse devam edelim ve bunu deneyelim.

97
00:06:10,820 --> 00:06:12,320
‫Devam et ve oynat tuşuna bas.

98
00:06:12,800 --> 00:06:14,030
‫Yine kendimizi öldürteceğiz.

99
00:06:15,700 --> 00:06:18,940
‫Ve bu sefer herhangi bir günlük mesajı da almıyoruz.

100
00:06:18,940 --> 00:06:21,370
‫Ve bu kez ince bir nedeni var.

101
00:06:21,490 --> 00:06:24,550
‫Bunun nedeni kontrolörden ayrılıyor olmamızdır.

102
00:06:24,640 --> 00:06:26,890
‫Buna "öldür" demeden önce.

103
00:06:26,890 --> 00:06:32,740
‫Bu yüzden kontrolü ele geçirmeye çalıştığında - aslında bu boş, kontrol yok - artık.

104
00:06:32,740 --> 00:06:38,470
‫Dolayısıyla bu bildirimi kontrolörden ayırma işlemini yapmadan hemen önce yapmamız gerekir.

105
00:06:38,620 --> 00:06:42,220
‫Bu, oyun modumuzu ele geçiren çizgiyi yukarı taşımayı da içeriyor.

106
00:06:42,220 --> 00:06:43,600
‫Bunun önemli olacağını düşünmemiştim.

107
00:06:43,660 --> 00:06:47,200
‫Ama şimdi düşününce, evet, tabii ki öyle.

108
00:06:47,200 --> 00:06:50,170
‫O zaman kendi seviyemize geçelim ve oynayalım.

109
00:06:50,500 --> 00:06:51,970
‫Gidip vurulalım.

110
00:06:51,970 --> 00:06:56,940
‫Ve bu yapıldıktan sonra, istediğimiz gibi yazdırmayı bitirdiğimizi görebilirsiniz.

111
00:06:56,950 --> 00:06:59,020
‫Bu yüzden yol boyunca birkaç aksaklık yaşadık.

112
00:06:59,020 --> 00:07:01,660
‫Yarışmada bunu alamadıysanız sizin suçunuz değil.

113
00:07:01,660 --> 00:07:03,730
‫O noktaya kadar diğer her şeyi doğru yaptınız.

114
00:07:03,730 --> 00:07:04,990
‫Bu harika.

115
00:07:04,990 --> 00:07:11,050
‫Umarım hata ayıklama konusunda bir şeyler yapmışsınızdır, ancak bu konularda takıldıysanız endişelenmeyin.

116
00:07:11,350 --> 00:07:17,890
‫Burada yapmak istediğim son şey, oyunu gerçekten bir zamanlayıcıda yeniden başlatmak.

117
00:07:17,980 --> 00:07:24,340
‫Şimdi, bunu yapabilmemizin yolu oldukça basit çünkü oyuncu kontrolörünün aslında bir yeniden

118
00:07:24,340 --> 00:07:25,960
‫başlatma yöntemi var.

119
00:07:25,960 --> 00:07:30,220
‫Yani eğer gidip buna bir göz atarsak, yeniden başlatma seviyesi olmalıdır.

120
00:07:30,220 --> 00:07:35,590
‫Aramak istediğimiz kişi bu ve bunu bir zamanlayıcıda yapmak istiyoruz.

121
00:07:35,590 --> 00:07:42,520
‫Zamanlayıcıları daha önce tekrar eden şeyler yapmak için kullandık, ancak bunu sadece bir eylemi belirli bir miktar geciktirmek

122
00:07:42,520 --> 00:07:44,050
‫için de kullanabiliriz.

123
00:07:44,050 --> 00:07:50,170
‫Bu yüzden atıcı oyuncu kontrolörü H'ye gideceğim ve burada bir özel mülk oluşturacağım.

124
00:07:50,890 --> 00:07:56,740
‫Özel mülk, herhangi bir yerde düzenlenen mülk olabilir.

125
00:07:58,620 --> 00:07:59,160
‫Float.

126
00:07:59,160 --> 00:08:02,940
‫Bu yeniden başlatma gecikmesi olacak.

127
00:08:03,060 --> 00:08:05,760
‫Bunun için neden bir plan tabanına ihtiyacımız olduğunu şimdiden anlayabilirsiniz.

128
00:08:05,790 --> 00:08:08,400
‫5/2 gecikme vereceğim.

129
00:08:08,610 --> 00:08:16,920
‫Sonra C++'a geçeceğim ve bir get timer world timer manager yapmak isteyeceğiz.

130
00:08:17,520 --> 00:08:19,850
‫Sonra da bunu yapabiliriz.

131
00:08:19,860 --> 00:08:21,870
‫O zaman eklememiz gerekiyor.

132
00:08:21,870 --> 00:08:27,120
‫Yani hash include ve zamanlayıcı yöneticisi olacak.

133
00:08:27,390 --> 00:08:33,210
‫H O zaman DOT operatörünü kullanabilmeliyiz çünkü buradaki dönüş tipi bir referanstır ve bir zamanlayıcı

134
00:08:33,210 --> 00:08:38,160
‫ayarlayacağız ve burada bir zamanlayıcı tanıtıcısı aktarmamız gerekiyor.

135
00:08:38,160 --> 00:08:40,590
‫Bu yüzden özel bir bölümde gidip bir tane oluşturalım.

136
00:08:40,590 --> 00:08:46,470
‫Yani bir F zamanlayıcı tutacağı olacak, ben buna yeniden başlatma zamanlayıcısı diyeceğim.

137
00:08:46,470 --> 00:08:51,230
‫O zaman bu, ayarlanmış zamanlayıcımıza aktardığımız tanıtıcı olacaktır.

138
00:08:51,240 --> 00:08:57,810
‫Buradaki beşinci imzada ihtiyacımız olan bir sonraki şey, aslında çağırmak istediğimiz nesneye sahip olmaktır, ki bu

139
00:08:57,810 --> 00:08:59,130
‫sadece bu olacaktır.

140
00:08:59,460 --> 00:09:05,280
‫Ve sonra, bence sadece yöntemin kendisi olmalı.

141
00:09:05,490 --> 00:09:08,280
‫Yani bunu ampersand yaparak yapabiliriz.

142
00:09:08,280 --> 00:09:13,920
‫Ve sonra aslında A oyuncu denetleyicisinde tanımlanmış olan ve çağırmak istediğimiz yöntem, yeniden

143
00:09:13,920 --> 00:09:16,200
‫başlatma seviyesi yöntemidir.

144
00:09:16,200 --> 00:09:17,910
‫Yani bir oyuncu kumandası.

145
00:09:19,300 --> 00:09:19,660
‫Cullen.

146
00:09:19,660 --> 00:09:27,340
‫Cullen yeniden başlatma seviyesi ve ardından yeniden başlatma gecikmesi olarak tanımladığımız gecikmeyi aktarmamız

147
00:09:27,340 --> 00:09:28,210
‫yeterlidir.

148
00:09:28,630 --> 00:09:36,800
‫Bunu yapın, sonuna noktalı virgül koyun ve umarım 5 saniye sonra kendimizi yeniden başlatabiliriz.

149
00:09:36,820 --> 00:09:42,520
‫Şimdi tüfeğimizi açarak ve biraz daha ölümcül hale getirerek testi biraz daha kolaylaştıracağız.

150
00:09:42,520 --> 00:09:48,160
‫Bu yüzden varsayılan ayarlara gideceğim, hasarı 50 yapacağım, böylece iki atışla öldürüleceğiz.

151
00:09:48,280 --> 00:09:49,900
‫Hadi gidip oynat tuşuna basalım.

152
00:09:50,750 --> 00:09:52,250
‫Kendimizi çabucak öldürelim.

153
00:09:53,260 --> 00:10:00,460
‫Ve 5 saniye sonra, umarım yeniden başlattığımız seviyeyi yeniden başlatmalıyız ve seviyeye geri dönmeliyiz.

154
00:10:00,460 --> 00:10:03,130
‫Yani zamanlayıcımız beklediğimiz gibi çalışıyor.

155
00:10:03,640 --> 00:10:11,410
‫Daha sonraki sürümlerde, yeniden başlatmak yerine, göreceğiniz şeyin buna benzeyen ve seyahat hatasından bahseden

156
00:10:11,410 --> 00:10:18,550
‫ve UUID, PID, sandbox, falan filan hakkında bir şeyler söyleyen bir hata mesajı olduğunu göreceksiniz.

157
00:10:18,580 --> 00:10:23,650
‫Yeniden başlatmaya çalıştığımızda ve yeniden başlatmamızın çalışıp çalışmadığını kontrol

158
00:10:23,650 --> 00:10:29,890
‫etmek istediğimizde bunu aşmanın yolu, oyun menüsü yerine nokta, nokta, nokta menümüze gitmek ve tek başına bir oyun

159
00:10:29,890 --> 00:10:31,920
‫olarak oynamamız gerekiyor.

160
00:10:31,930 --> 00:10:38,110
‫Bağımsız bir oyun olarak oynarsanız, başlatılması biraz daha uzun sürer, ancak yeniden

161
00:10:38,110 --> 00:10:41,620
‫başlatma beklendiği gibi çalışacaktır.

162
00:10:41,620 --> 00:10:43,600
‫Ve seviyenin yeniden yüklendiğini görüyoruz.

163
00:10:43,600 --> 00:10:46,570
‫Şimdi, açıkçası bunun gerçekleşeceğine dair pek bir belirti yok.

164
00:10:46,570 --> 00:10:50,170
‫Bu yüzden sonraki derslerde kullanıcı arayüzüne bakacağız.

165
00:10:50,170 --> 00:10:51,010
‫Orada görüşürüz.

