﻿1
00:00:04,260 --> 00:00:05,340
‫Tekrar hoş geldiniz.

2
00:00:05,700 --> 00:00:11,550
‫Şimdi bir oyun modumuz var ve oyunu ne zaman başlatabileceğimizi belirlemek için oyun modunu kullanmak istiyoruz.

3
00:00:11,580 --> 00:00:17,700
‫Şimdi, bazı oyunlarda oyun başladığında başlayan bir gecikme veya geri sayım sayacı vardır.

4
00:00:17,700 --> 00:00:23,460
‫Ve belirli bir süre sonra, oyuncunun karakteri veya bizim durumumuzda tankı dünyada hareket

5
00:00:23,460 --> 00:00:25,450
‫ettirmesine izin verilir.

6
00:00:25,470 --> 00:00:28,500
‫Bu yüzden bu videoda bunu uygulayacağız.

7
00:00:28,530 --> 00:00:35,520
‫Bu, ilk olarak girişi devre dışı bırakmayı içerecek, böylece oyun ilk başladığında hareket edemeyeceğiz ve daha

8
00:00:35,520 --> 00:00:41,860
‫sonra bir zamanlayıcı ayarlayacağız ve belirli bir süre sonra girişi etkinleştirebileceğiz.

9
00:00:41,880 --> 00:00:47,870
‫Şimdi tankları ayarlama oyun moduna geri dönelim ve buraya birkaç şey ekleyelim.

10
00:00:47,880 --> 00:00:54,030
‫İlk olarak, oyun başladığında hareket etmeye başlamadan önce geçmesi gereken süre için bir şamandıra

11
00:00:54,030 --> 00:00:55,380
‫eklemek istiyorum.

12
00:00:55,410 --> 00:01:03,120
‫Bu float'a başlangıç gecikmesi adı verilecek ve bunu üç nokta F olarak başlatacağım, böylece oyuna başlamadan

13
00:01:03,120 --> 00:01:06,800
‫önce 3 saniye beklememiz gerekecek.

14
00:01:06,810 --> 00:01:12,420
‫Şimdi, oyun başlar başlamaz bu zamanlayıcıyı başlatmak istiyorum, yani bu zamanlayıcıyı başlatacak

15
00:01:12,420 --> 00:01:16,510
‫bir fonksiyon istiyorum ve bunu da özel bir fonksiyon yapacağım.

16
00:01:16,530 --> 00:01:21,180
‫Bunu handle game start adında bir void fonksiyon yapacağım.

17
00:01:21,210 --> 00:01:25,200
‫Artık oyun başlangıcını tune tanks oyun modunda uygulayabilirim.

18
00:01:25,470 --> 00:01:28,320
‫Oyuna başlamak için buraya gelin.

19
00:01:28,770 --> 00:01:36,090
‫Şimdi buraya tune tanks oyun modu sınıf adını eklemeyi unutmayacağım ve şimdi bir oyun başlatma işlevim

20
00:01:36,090 --> 00:01:36,930
‫var.

21
00:01:37,170 --> 00:01:40,410
‫Şimdi bunu arayacağınız yer Oyuna Başla olacaktır.

22
00:01:40,620 --> 00:01:43,590
‫Oyunun başlangıcında Oyuna Başla çağrısı yapıldığından.

23
00:01:43,590 --> 00:01:47,180
‫Bu yüzden oyunu idare edeceğim, buradan başlayacağım ve oyunu başlatacağım.

24
00:01:47,190 --> 00:01:52,110
‫Ve burada oyunun başında tankı ve ayar tanklarını, oyuncuyu, kontrolör değişkenlerini

25
00:01:52,110 --> 00:01:58,050
‫ayarladığımız birkaç şey yaptığımız için, bunları oyun başlangıcına taşımak istiyorum.

26
00:01:58,050 --> 00:02:03,600
‫Bu yüzden bunları doğrudan oyun başlangıcına taşıyacağım ve bu şekilde tank ve ayar tankları oyuncu

27
00:02:03,600 --> 00:02:08,940
‫denetleyicisi ayarlanacak çünkü burada oyun başlangıcını ele alıyoruz ve oyuna başlıyoruz.

28
00:02:08,940 --> 00:02:15,990
‫İşte burada, kullanıcı girişini etkinleştirebileceğimiz bir geri sayım sayacı başlatmak istiyorum.

29
00:02:15,990 --> 00:02:21,480
‫Şimdi zamanlayıcıyı başlatmadan önce, girişi devre dışı bırakacağım, böylece tankı henüz hareket ettiremeyiz.

30
00:02:21,690 --> 00:02:24,420
‫Bu da bizim görevimizi gerektirecek.

31
00:02:24,420 --> 00:02:29,670
‫Buraya tune tankları, set player enabled state adlı oyuncu kontrolörü yerleştirdik.

32
00:02:29,670 --> 00:02:33,690
‫Bu da demek oluyor ki, oyuncu kontrolörü olan Tune Tank'ı kullanacağım.

33
00:02:33,690 --> 00:02:38,400
‫Ve eğer tune tank'ın oyuncu kumandasını kullanacaksam, geçerli olduğundan emin olmak iyi bir fikir.

34
00:02:38,400 --> 00:02:46,200
‫Bu yüzden if tune tanks, player, controller diyeceğim ve bu if ifadesinin içine ulaşırsak,

35
00:02:46,200 --> 00:02:57,570
‫tune tanks, player controller'ı alabilir ve set player enabled state'i çağırabilir ve false'u geçirebilirim.

36
00:02:57,690 --> 00:03:00,720
‫Ve bu şekilde tankımız hareket edemeyecek.

37
00:03:00,720 --> 00:03:06,780
‫Kırmızı dalgalı çizgileri görüyorum ve bunun nedeni tankları ayarlamak yerine tank tankları, oyuncu kontrolörü

38
00:03:06,780 --> 00:03:07,380
‫demem.

39
00:03:07,830 --> 00:03:11,250
‫Yani şimdi doğru yazınca hiçbir hata almıyorum.

40
00:03:11,250 --> 00:03:13,690
‫Şimdi bir zamanlayıcı başlatmamız gerekiyor.

41
00:03:13,710 --> 00:03:20,850
‫Artık zamanlayıcıların bir F zamanlayıcı tanıtıcısı kullanmayı içerdiğini biliyoruz ve aslında sınıfa ait bir üye değişkene

42
00:03:20,850 --> 00:03:25,110
‫sahip olmak yerine bir F zamanlayıcı tanıtıcısı oluşturabiliriz.

43
00:03:25,200 --> 00:03:31,470
‫Şimdi devam edip bunu yapacağım ve bu oynatıcıyı etkinleştir zamanlayıcı tanıtıcısı olarak adlandıracağım.

44
00:03:31,800 --> 00:03:38,340
‫Ve şimdi, zamanlayıcımızın geri arama işlevi için bir zamanlayıcı ayarlamamız gerekiyor, set player enabled

45
00:03:38,340 --> 00:03:45,390
‫state kullanmak istiyorum, ancak set player enabled state boolean türünde bir girdi gerektiren bir işlevdir.

46
00:03:45,990 --> 00:03:51,900
‫Şimdi, giriş parametreleri gerektiren bir geri arama kullanarak bir zamanlayıcının nasıl ayarlanacağını görmedik.

47
00:03:51,900 --> 00:03:56,190
‫Bu, zamanlayıcı temsilcisi adı verilen yeni bir kavramı içerecektir.

48
00:03:56,190 --> 00:03:59,310
‫Şimdi Unreal Engine'in zamanlayıcı sistemine bir göz atalım.

49
00:03:59,310 --> 00:04:07,080
‫Yine, zamanlayıcılarımızı yöneten bir dünya zamanlayıcı yöneticisi olduğunu ve bunun bir zamanlayıcı ayarlama işlevi olduğunu biliyoruz.

50
00:04:07,170 --> 00:04:11,280
‫Artık zamanlayıcı ayarlama işlevinin birden fazla aşırı yüklemesi var.

51
00:04:11,370 --> 00:04:13,410
‫Onlardan birini zaten gördük.

52
00:04:13,440 --> 00:04:16,710
‫Şimdi bu fonksiyonun başka bir versiyonundan bahsedeceğim.

53
00:04:16,710 --> 00:04:24,570
‫Ve bu sürüm bir zamanlayıcı tanıtıcısı, bir zamanlayıcı oranı veya geri arama işlevimiz çağrılmadan önce beklememiz gereken

54
00:04:24,570 --> 00:04:26,760
‫bir gecikme süresi gerektirir.

55
00:04:26,760 --> 00:04:32,550
‫Ve doğrudan bir geri arama işlevinin adresini almak yerine, zamanlayıcı temsilcisi adı verilen bir şey

56
00:04:32,550 --> 00:04:33,270
‫alabilir.

57
00:04:33,270 --> 00:04:40,440
‫Bu, bir işlevi doğrudan kendisine bağlayabilen bir nesne oluşturmamızı sağlayan F timer delegate türünde

58
00:04:40,440 --> 00:04:41,490
‫bir yapıdır.

59
00:04:41,490 --> 00:04:45,600
‫Ve zamanlayıcı temsilcileri, giriş parametreleri gerektiren işlevleri bağlayabilir.

60
00:04:45,600 --> 00:04:53,370
‫Şimdi bir EF timer delegate değişkeni oluşturabilir ve f timer delegate'den create you object fonksiyonunu kullanarak

61
00:04:53,370 --> 00:04:55,080
‫bunu başlatabiliriz.

62
00:04:55,110 --> 00:05:00,990
‫Bu, yeni bir zamanlayıcı delegesi oluşturacak ve parantez içine aktardığımız şeye göre onu başlatacaktır.

63
00:05:00,990 --> 00:05:03,810
‫Bu, of olan bir kullanıcı nesnesi alacaktır.

64
00:05:03,860 --> 00:05:08,110
‫Tabii ki, geri arama fonksiyonumuzun bulunduğu sınıf.

65
00:05:08,120 --> 00:05:15,110
‫Daha sonra geri arama fonksiyonunun adresini ve çağrıldığında geri arama fonksiyonumuza aktarılmasını

66
00:05:15,110 --> 00:05:18,450
‫istediğimiz tüm girdi değerlerini alır.

67
00:05:18,470 --> 00:05:25,450
‫Buradan, dünya zamanlayıcı yöneticisinden set timer'ı çağırabilir ve bir zamanlayıcı delegesi alan aşırı yükü kullanabiliriz.

68
00:05:25,460 --> 00:05:32,300
‫Bu aşırı yükleme, zamanlayıcı tanıtıcısının kendisini, zamanlayıcı temsilcisini, oynatma oranını veya geri çağrımızın çağrılacağı

69
00:05:32,300 --> 00:05:38,630
‫gecikmeyi belirleyen bir float ve ardından zamanlayıcımızın döngü yapıp yapmayacağını belirlemek için bir boolean gerektirir,

70
00:05:38,630 --> 00:05:43,310
‫böylece bir F zamanlayıcı temsilcisini nasıl oluşturacağımızı biliriz.

71
00:05:43,310 --> 00:05:49,610
‫Bu yüzden yeni if deyimimizin içindeki handle game start fonksiyonunda bir tane oluşturmanızı istiyorum.

72
00:05:49,610 --> 00:05:54,200
‫Bu yüzden yerel bir f timer delegate oluşturun ve f timer delegate kullanın.

73
00:05:54,200 --> 00:05:55,640
‫Nesnenizi oluşturun.

74
00:05:55,640 --> 00:06:01,610
‫Şimdi bir kullanıcı nesnesi aktarmamız gerekecek ve genellikle bunu kullanıcı nesnesi olarak kullanıyorduk,

75
00:06:01,610 --> 00:06:05,870
‫ancak çağrılmasını istediğimiz işlev oyuncu denetleyicisinde mevcut.

76
00:06:05,870 --> 00:06:12,320
‫Bu nedenle, kullanıcı nesnesi olacak ilk girdi olarak değişken tune tanks oyuncu denetleyicisini geçirin

77
00:06:12,320 --> 00:06:20,300
‫ve geri arama işlevi, özel oyuncu denetleyicimize eklediğimiz işlev olan oyuncu etkin durumunu ayarlayacaktır.

78
00:06:20,300 --> 00:06:25,730
‫Operatörün adresini ve üçüncü girdi olarak değeri aktaracağımızı unutmayın.

79
00:06:25,730 --> 00:06:32,330
‫True, zamanlayıcının sonunda geri çağrımız çağrıldığında set player enabled durumuna geçirilecek

80
00:06:32,330 --> 00:06:33,590
‫olan şey budur.

81
00:06:33,590 --> 00:06:36,710
‫Videoyu durdurun ve bunu şimdi deneyin.

82
00:06:39,560 --> 00:06:46,580
‫Zamanlayıcı tanıtıcımızın hemen altında, yerel bir F zamanlayıcı temsilcisi oluşturacağım ve bu oyuncuya

83
00:06:46,580 --> 00:06:50,540
‫zamanlayıcı temsilcisini etkinleştir diyeceğim.

84
00:06:51,140 --> 00:06:51,710
‫Sorun değil.

85
00:06:51,710 --> 00:06:53,030
‫Eğer adını başka bir şey koysaydınız.

86
00:06:53,030 --> 00:07:00,200
‫Şimdi bunu f timer, delegate kullanarak başlatacağım, nesnenizi oluşturacağım.

87
00:07:00,470 --> 00:07:06,590
‫Ve bu ilk olarak bir kullanıcı nesnesi alacak ve bu bizim tune tanks oyuncu denetleyicimiz olacak.

88
00:07:06,590 --> 00:07:11,300
‫Bu yüzden ilk girdi olarak tank oyuncu kumandasını ayarla diyeceğim.

89
00:07:11,390 --> 00:07:19,250
‫Ve ikincisi için geri arama fonksiyonumuza ihtiyacımız var ve bu bir tune tanks player, controller

90
00:07:19,910 --> 00:07:23,360
‫set player enabled state olacak.

91
00:07:23,360 --> 00:07:30,290
‫Ve unutmamalıyım ki, bu fonksiyon adresi için operatörün adresine ihtiyacım var ve bu geri arama fonksiyonuna

92
00:07:30,290 --> 00:07:34,670
‫aktarılmasını istediğim değer bu şekilde doğru olacak.

93
00:07:34,670 --> 00:07:41,120
‫Gecikme süresinin sonunda, bu geri arama çağrıldığında geri arama işlevine aktarılan değer

94
00:07:41,120 --> 00:07:42,290
‫true olacaktır.

95
00:07:42,290 --> 00:07:48,770
‫Şimdi set timer'ı çağırmaya hazırım, bu da get world timer manager'ı çağırmam gerektiği anlamına geliyor.

96
00:07:48,950 --> 00:07:51,530
‫Ve sonra oradan zamanlayıcıyı ayarla diyebiliyorum.

97
00:07:52,070 --> 00:07:59,030
‫Ve kullandığımız fonksiyon aşırı yüklemesi ilk olarak bir zamanlayıcı tanıtıcısı alır ve bu, oyuncu etkinleştirme zamanlayıcı

98
00:07:59,060 --> 00:08:00,560
‫tanıtıcısı olacaktır.

99
00:08:00,590 --> 00:08:04,370
‫İçeri aktaracağım bir sonraki girdi temsilci olacak.

100
00:08:04,370 --> 00:08:08,630
‫Yani bu oyuncu etkinleştirme, zamanlayıcı temsilcisi olacak.

101
00:08:10,130 --> 00:08:10,520
‫Sıradaki.

102
00:08:10,520 --> 00:08:16,700
‫Gecikme süremize ihtiyacımız var ve bu da az önce oluşturduğumuz float olan başlangıç gecikmesi olacak.

103
00:08:16,730 --> 00:08:20,120
‫Sırada başlangıç gecikmesi var.

104
00:08:20,990 --> 00:08:27,590
‫Ve son olarak, bu zamanlayıcının döngüye girmesini istemiyorum, bu yüzden döngü davranışı elde etmemek için false değerini

105
00:08:27,590 --> 00:08:28,430
‫geçeceğim.

106
00:08:29,300 --> 00:08:33,020
‫Şimdi devam edeceğim ve güzel görünmesi için bu girdileri girintileyeceğim.

107
00:08:33,710 --> 00:08:38,690
‫Ve şimdi yeni timer delegemizi kullanarak set timer'ı çağırıyoruz.

108
00:08:38,690 --> 00:08:45,380
‫Ve bu gecikme süresinin sonunda, başlangıç gecikmesi 3 saniye olduğundan ve zamanlayıcımızı ayarlamadan önce set

109
00:08:45,380 --> 00:08:51,440
‫player enabled state'i false değerini girerek çağırdığımızdan, geri arama fonksiyonumuz set player enabled

110
00:08:51,440 --> 00:08:55,190
‫state'in true değeriyle çağrılmasını sağlamalıyız.

111
00:08:55,190 --> 00:09:00,920
‫Oynat tuşuna bastığımızda, bu üç saniyelik gecikme sona erene kadar hareket edememeliyiz.

112
00:09:00,920 --> 00:09:03,590
‫Şimdi bunu derleyelim ve nasıl çalıştığını görelim.

113
00:09:04,100 --> 00:09:09,140
‫Şimdi gidip oynat tuşuna basacağım ve hareket etmeye çalışıyorum ama yapamıyorum.

114
00:09:09,140 --> 00:09:12,470
‫Ve 3 saniye sonra aniden hareket edebiliyorum.

115
00:09:12,500 --> 00:09:14,210
‫Ayrıca şuna da bir bakın.

116
00:09:14,240 --> 00:09:17,330
‫İmlecimin artı işareti olduğuna dikkat edin.

117
00:09:17,330 --> 00:09:23,000
‫Ekranda görmek zor olabilir, ancak ekranınızda gayet iyi görebilmeniz gerekir.

118
00:09:23,000 --> 00:09:27,470
‫Bu da tanklarıma nişan almamı ve onları kontrol etmemi çok daha kolay hale getiriyor.

119
00:09:27,470 --> 00:09:28,820
‫Taret dönüşü.

120
00:09:29,210 --> 00:09:30,140
‫Mükemmel.

121
00:09:30,140 --> 00:09:36,440
‫Özetle, oyun modu için bir handle game start fonksiyonu oluşturduk ve bunu çağırıp oyuna

122
00:09:36,440 --> 00:09:37,370
‫başlıyoruz.

123
00:09:37,580 --> 00:09:45,830
‫Ayrıca, oyuncu denetleyicisindeki set player enabled state fonksiyonumuzu bağladığımız bir timer delegate kullanarak bir zamanlayıcı

124
00:09:45,830 --> 00:09:47,180
‫ayarladık.

125
00:09:47,180 --> 00:09:53,810
‫Bu, zamanlayıcımız için giriş parametrelerini alan bir işlev geri çağrısına sahip olmamızı sağladı ve bunu oyun başladığında üç

126
00:09:53,810 --> 00:09:58,340
‫saniyelik bir gecikmeden sonra kullanıcı girişini etkinleştirmek için kullanıyoruz.

127
00:09:58,370 --> 00:10:03,470
‫Şimdi, eğer girişin etkin olmadığını bildiren bir tür görsel ipucu olmasaydı, bu bir oyuncu

128
00:10:03,470 --> 00:10:05,690
‫için sinir bozucu olabilirdi.

129
00:10:05,690 --> 00:10:08,150
‫Ekranda geri sayım gibi bir şey.

130
00:10:08,150 --> 00:10:10,640
‫Bu yüzden gelecek videolarda bununla ilgileneceğiz.

131
00:10:10,640 --> 00:10:12,410
‫Ama şimdilik, tebrikler.

132
00:10:12,410 --> 00:10:18,170
‫Artık girdi parametreleri alan bir fonksiyonu bir zamanlayıcı temsilcisine nasıl bağlayacağınızı biliyorsunuz.

133
00:10:18,170 --> 00:10:19,640
‫Bir sonraki videoda görüşürüz.

