﻿1
00:00:04,290 --> 00:00:05,490
‫Merhaba ve hoş geldiniz.

2
00:00:05,490 --> 00:00:12,810
‫Bu derste, bir bileşenin sahibi olan aktöre nasıl işaretçi alabileceğimizi öğreneceğiz.

3
00:00:12,810 --> 00:00:16,740
‫Bir işaretçinin ne olduğunu, bellekte hangi adreslerin bulunduğunu öğreneceğiz

4
00:00:16,740 --> 00:00:19,740
‫ve bunları günlük mesajlarımıza da yazdıracağız.

5
00:00:19,740 --> 00:00:20,640
‫Hadi içeri dalalım.

6
00:00:21,090 --> 00:00:27,660
‫Şimdi bir saniye durup programlamada genel olarak değişken adresleriyle ilgili temel bir

7
00:00:27,660 --> 00:00:29,130
‫kavramı anlayalım.

8
00:00:29,130 --> 00:00:30,810
‫Bir değişkenin adresi nedir?

9
00:00:30,810 --> 00:00:42,030
‫Tüm değişkenlerimizi bilgisayarınızdaki bu ram çiplerinde bellekte saklıyoruz ve değişkenler verilerini saklamak için belleğe

10
00:00:42,030 --> 00:00:43,920
‫ihtiyaç duyuyor.

11
00:00:43,920 --> 00:00:52,740
‫Yani kayan noktalı bir sayı ya 32 bit veri gerektirir ya da 64, eğer çift tamsayı ise, belirli bir miktar bellek gerektirir.

12
00:00:52,740 --> 00:00:58,440
‫Ayrıca, sahip olduğunuz yapı veya sınıflar ne kadar büyükse, örneğin aktörler çok büyük olabilir ve çok

13
00:00:58,440 --> 00:01:04,230
‫fazla veri içerebilir, aktör başına birkaç kilobayt bellek bile gerektirebilir, bunun gibi şeyler.

14
00:01:04,590 --> 00:01:12,510
‫Bu hafıza, hafıza bankalarınız olan bu geniş boş veri alanında bir yerde yaşamak zorundadır.

15
00:01:12,660 --> 00:01:16,410
‫Ve bu konum bir adres olarak bilinir.

16
00:01:16,410 --> 00:01:18,420
‫Peki bu pratikte nasıl işliyor?

17
00:01:18,420 --> 00:01:21,870
‫Elimizde sıfırlar ve birlerden oluşan büyük bir alan olduğunu düşünün.

18
00:01:21,870 --> 00:01:25,140
‫Ram'inizdeki veriler bunlar.

19
00:01:25,320 --> 00:01:32,580
‫Peki, o zaman değişken ve aktörüm adlı bir aktör değişkeninin, aktördeki verileri depolamak için

20
00:01:32,580 --> 00:01:37,110
‫ayrılan bellekte belirli bir konuma sahip olması gerekir.

21
00:01:37,110 --> 00:01:42,300
‫Dolayısıyla, belleğin bu kırmızı bölümü, belirli bir aktör için verileri depoladığımız

22
00:01:42,300 --> 00:01:50,610
‫yer olabilir ve genellikle ikili veya onaltılı olarak gösterilen ve esasen sadece konum olan bir adrese sahiptir.

23
00:01:50,610 --> 00:01:57,840
‫Buradaki tüm baytları, tüm birleri ve sıfırları saymaya başlarsanız, aslında tek tek birleri ve sıfırları

24
00:01:57,840 --> 00:01:59,220
‫saymayız.

25
00:01:59,220 --> 00:02:03,360
‫Sekiz adımda sayıyoruz ama bu çok önemli değil.

26
00:02:03,360 --> 00:02:04,410
‫Baytları sayıyoruz.

27
00:02:04,620 --> 00:02:08,070
‫Bu aslında başladığımız adres.

28
00:02:08,810 --> 00:02:14,180
‫Aktörümüz hakkında konuşursak, her türün belirli bir boyutu vardır.

29
00:02:14,180 --> 00:02:18,020
‫Yani aktörün şu kadar bayt veriye ihtiyaç duyacağını biliyoruz.

30
00:02:18,020 --> 00:02:23,240
‫Bu da bize aktörümüzle ilgili verileri nerede bulacağımızı söyler.

31
00:02:23,360 --> 00:02:24,880
‫Peki bu neden önemli?

32
00:02:24,890 --> 00:02:30,680
‫Peki, aktörlere bir çekim yapmak isteyebileceğimiz duruma bir göz atalım.

33
00:02:30,680 --> 00:02:34,340
‫Aynı verilere referans veren iki değişkene sahip olmak istiyoruz.

34
00:02:34,520 --> 00:02:38,240
‫Naif durumda, sadece bunu kopyalayacağız.

35
00:02:38,240 --> 00:02:44,360
‫Böylece my actor değişkenine ayrılmış bir bellek yığınımız olur.

36
00:02:44,510 --> 00:02:50,030
‫Henüz hiçbir şey atamadığımız Your Actor adlı boş bir değişkene ayrılmış başka

37
00:02:50,030 --> 00:02:52,280
‫bir bellek yığınımız var.

38
00:02:52,550 --> 00:02:59,690
‫Ve sonra yapmak istediğimiz şey, aynı verileri içermelerini istediğimiz için, sadece birini diğerine atamaktır.

39
00:02:59,690 --> 00:03:07,070
‫Bu da aslında benim aktörümde bulunan tüm veri bitlerinin bir kopyasını çıkarmamız ve bunları sizin aktörünüzü oluşturan

40
00:03:07,070 --> 00:03:10,400
‫tüm bitlerin içine yerleştirmemizle sonuçlanır.

41
00:03:10,730 --> 00:03:17,990
‫Dolayısıyla bu oldukça maliyetli bir işlem olabilir çünkü CPU'nuzun orijinal bellekteki her bir parçayı gözden geçirip

42
00:03:17,990 --> 00:03:22,680
‫değerlendirmesi ve yeni konuma yerleştirmesi gerekir, bu da zaman alır.

43
00:03:22,700 --> 00:03:25,760
‫Şimdi, işaretçi adı verilen bir şey kullanarak bunu aşmanın bir yolu var.

44
00:03:25,760 --> 00:03:33,530
‫Yani burada, My Actor'ın tamamını saklamak yerine, tüm aktörü saklamayan a my actor veya

45
00:03:33,530 --> 00:03:38,840
‫an actor a actor pointer adında bir değişkenimiz var.

46
00:03:38,840 --> 00:03:42,170
‫Sadece bir eylemi bulabileceğiniz adresi saklar.

47
00:03:42,170 --> 00:03:46,580
‫Böylece bir adresi saklamak için aslında çok daha az bellek kullanıldığını görebilirsiniz.

48
00:03:46,580 --> 00:03:54,140
‫Ve sonra yaptığımız şey, sizin aktörünüzde benim aktörümün adresini saklamaktır, böylece veriyi kopyalamak

49
00:03:54,140 --> 00:03:59,090
‫yerine orijinal aktöre işaret eder, bu nedenle işaretçi adı verilir.

50
00:03:59,240 --> 00:04:01,880
‫Şimdi bu C++'daki gerçek sözdizimi değildir.

51
00:04:01,880 --> 00:04:04,430
‫C++'da söz dizimi çok daha yoğundur.

52
00:04:04,640 --> 00:04:09,650
‫Bir şeyin işaretçi olduğunu, türünden sonra bir yıldız koyarak söyleriz.

53
00:04:09,650 --> 00:04:17,660
‫Yani bir aktör yıldızı, bunun bir aktör işaretçisi olduğu anlamına gelir ve bir değişkenin adresini almak için bir ve işareti

54
00:04:17,660 --> 00:04:22,310
‫kullanırız. unreal'da işaretçi döndüren birçok işlev olduğu için henüz

55
00:04:22,310 --> 00:04:25,250
‫bu adresi çok fazla kullanmayacağız.

56
00:04:25,250 --> 00:04:31,160
‫Bu yüzden şimdilik bu işaretçileri oluşturmak yerine nasıl kullanacağımızı bilmemiz gerekiyor.

57
00:04:31,640 --> 00:04:40,070
‫Dolayısıyla, sahnemizdeki diğer nesnelere erişmemizi sağlayan böyle bir işlev get owner'dır.

58
00:04:40,070 --> 00:04:46,460
‫Peki bu neden bir bileşenimiz olduğunda, bir aktör tarafından sahiplenildiğinde geçerli oluyor?

59
00:04:46,460 --> 00:04:53,690
‫Yani bu bileşenin aktörümüzle konuşmasını, konumunu almasını, konumunu ayarlamasını ve bunun gibi şeyler yapmasını

60
00:04:53,690 --> 00:04:58,400
‫istiyorsak, o zaman bu aktöre bir işaretçi alabilmemiz gerekir.

61
00:04:58,400 --> 00:05:00,040
‫Bir kopyasını almak istemiyoruz.

62
00:05:00,050 --> 00:05:03,350
‫Aslında bunun bir kopyasını almak istemiyoruz çünkü aktörü değiştirmek istiyoruz.

63
00:05:03,350 --> 00:05:07,160
‫Eğer bir kopya üzerinde değişiklik yapsaydık, bu değişiklik sahnede görünmezdi.

64
00:05:07,280 --> 00:05:13,850
‫Dolayısıyla, bir aktöre işaretçi olan bir değişkeni saklayabilmemiz gerekir.

65
00:05:14,330 --> 00:05:19,760
‫Bunu yapmanın yolu, az önce slaytlarda gördüğümüz gibi, bir A aktör tipine sahip olmaktır.

66
00:05:19,760 --> 00:05:25,970
‫Ama sonra sonuna bir yıldız koyuyoruz, bu da bize bunun burada depolanan bir aktör olmadığını, bunun sadece

67
00:05:25,970 --> 00:05:28,880
‫depolanan bir aktörün adresi olduğunu söylüyor.

68
00:05:29,150 --> 00:05:36,800
‫Böylece aktörü alacağız ve bu sahibini çağıracağız ve sonra bunu get sahibini çağırmanın sonucuna

69
00:05:36,800 --> 00:05:39,140
‫eşit olarak ayarlayacağız.

70
00:05:39,140 --> 00:05:46,970
‫Yani get owner, bir sahip işaretçisi almanızı sağlayan bir aktör bileşeni işlevidir.

71
00:05:46,970 --> 00:05:53,690
‫Sahibini gösteren bir aktör işaretçisi alın, bu satırın sonuna noktalı virgül koyun.

72
00:05:53,690 --> 00:06:01,670
‫Ve burada sahip olduğumuz şey, bu belirli bileşene sahip olan bir aktörün adresini saklayan bir değişkendir.

73
00:06:01,670 --> 00:06:07,580
‫Bu yüzden, bu değişkenin adresini yazdırarak bir şeyler yapmanız için size meydan okumak istiyorum.

74
00:06:07,580 --> 00:06:14,690
‫Bu yüzden a aktör değişkenini kullanın ve biçimlendirdiğiniz yüzdeyi kullanın, günlüklerde belirtin.

75
00:06:14,690 --> 00:06:19,550
‫Yani yüzde aslında işaretsiz bir tamsayı kullandığınız anlamına gelir.

76
00:06:19,550 --> 00:06:25,250
‫Bu, negatif olamayan bir tamsayı anlamına gelir, bu da mantıklıdır çünkü belleği nerede bulacağımızdan

77
00:06:25,730 --> 00:06:31,790
‫bahsederken adresler negatif olamaz ve sonra ne yazdırdığını bulun, gidin ve oynayın, günlük mesajına bakın,

78
00:06:31,820 --> 00:06:33,980
‫ne yazdırdığına bakın.

79
00:06:34,250 --> 00:06:38,000
‫Oynamayı bırakıp tekrar oynamaya başladığınızda farklı oyunlar arasında değişiyor mu?

80
00:06:38,000 --> 00:06:41,900
‫Peki ya taşıyıcı birden fazla aktördeyse?

81
00:06:41,900 --> 00:06:45,680
‫Konsolda birden fazla farklı adres mi yazdırılıyor?

82
00:06:45,710 --> 00:06:48,620
‫Videoyu durdurun ve küçük bir araştırma yapın.

83
00:06:52,030 --> 00:06:52,390
‫Tamam.

84
00:06:52,390 --> 00:06:53,410
‫Tekrar hoş geldiniz.

85
00:06:53,440 --> 00:07:04,380
‫Bu yüzden bu Yule günlüğüne gideceğiz ve nakliyeci sahibi, adres, kolon yüzdesi, siz diyeceğiz.

86
00:07:04,510 --> 00:07:07,540
‫Yani işaretçi değerini koyacağı yer burasıdır.

87
00:07:07,930 --> 00:07:10,210
‫Ve sonra gerçek işaretçiyi koyacağız.

88
00:07:10,210 --> 00:07:12,430
‫Sahibini buraya getireceğiz.

89
00:07:12,940 --> 00:07:16,360
‫Bu yüzden sahibinin adresini yazdıracak.

90
00:07:16,450 --> 00:07:19,150
‫Gerçek olmayan bir yere gidelim.

91
00:07:19,180 --> 00:07:21,910
‫Control alt f 11'e basın.

92
00:07:21,910 --> 00:07:24,610
‫Derleme işlemi bittiğinde oynat tuşuna basalım.

93
00:07:24,610 --> 00:07:29,740
‫Ve gördüğümüz şey, günlük mesajı taşıyıcı sahibi adresinin geldiği ve bize aslında

94
00:07:29,740 --> 00:07:32,300
‫bu adres için çok büyük bir sayı verdiği.

95
00:07:32,320 --> 00:07:36,460
‫Ya oynamayı bırakırsam ve sadece bir saniyeliğine tekrar oynarsam?

96
00:07:36,460 --> 00:07:42,250
‫Adresin oldukça farklı olduğunu görebilirsiniz ve bunun nedeni, oynat düğmesine

97
00:07:42,250 --> 00:07:51,850
‫her bastığımızda Unreal'ın sahnede sıfırdan başlayarak oynamaya hazır yepyeni bir aktör grubu oluşturmasıdır.

98
00:07:51,850 --> 00:07:57,220
‫Bu yüzden play tuşuna her bastığımızda yeni adres konumları görüyoruz.

99
00:07:57,220 --> 00:08:05,320
‫Örneğin bu sütuna gidersem ve sütuna bir taşıyıcı bileşen eklersem ve oynat düğmesine basıp günlüklerimin

100
00:08:05,320 --> 00:08:08,020
‫en altına inersek ne olur?

101
00:08:08,020 --> 00:08:15,310
‫Burada iki farklı adresin yazdırıldığını görebilirsiniz çünkü bellekte

102
00:08:15,310 --> 00:08:20,890
‫iki farklı konumda depolanan iki farklı aktör vardır.

103
00:08:20,890 --> 00:08:25,990
‫Bunlar iki adres ve bu iki adres arasında aslında birkaç megabayt fark olduğunu

104
00:08:25,990 --> 00:08:31,810
‫görebilirsiniz, bu da size Unreal tarafından bellekte ne kadar çok bilgi depolandığını

105
00:08:31,810 --> 00:08:38,290
‫ve ayrıca çok fazla kopya oluşturmamak için verimli olmanın neden önemli olduğunu anlatıyor.

106
00:08:38,290 --> 00:08:39,700
‫Bu ders için bu kadar.

107
00:08:39,700 --> 00:08:43,570
‫İşaretçilerle daha eğlenceli şeyler yapacağımız bir sonraki etkinlikte görüşmek üzere.

