‫Merhaba ve hoş geldiniz.
‫Bu derste, bir bileşenin sahibi olan aktöre nasıl işaretçi alabileceğimizi öğreneceğiz.
‫Bir işaretçinin ne olduğunu, bellekte hangi adreslerin bulunduğunu öğreneceğiz
‫ve bunları günlük mesajlarımıza da yazdıracağız.
‫Hadi içeri dalalım.
‫Şimdi bir saniye durup programlamada genel olarak değişken adresleriyle ilgili temel bir
‫kavramı anlayalım.
‫Bir değişkenin adresi nedir?
‫Tüm değişkenlerimizi bilgisayarınızdaki bu ram çiplerinde bellekte saklıyoruz ve değişkenler verilerini saklamak için belleğe
‫ihtiyaç duyuyor.
‫Yani kayan noktalı bir sayı ya 32 bit veri gerektirir ya da 64, eğer çift tamsayı ise, belirli bir miktar bellek gerektirir.
‫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
‫fazla veri içerebilir, aktör başına birkaç kilobayt bellek bile gerektirebilir, bunun gibi şeyler.
‫Bu hafıza, hafıza bankalarınız olan bu geniş boş veri alanında bir yerde yaşamak zorundadır.
‫Ve bu konum bir adres olarak bilinir.
‫Peki bu pratikte nasıl işliyor?
‫Elimizde sıfırlar ve birlerden oluşan büyük bir alan olduğunu düşünün.
‫Ram'inizdeki veriler bunlar.
‫Peki, o zaman değişken ve aktörüm adlı bir aktör değişkeninin, aktördeki verileri depolamak için
‫ayrılan bellekte belirli bir konuma sahip olması gerekir.
‫Dolayısıyla, belleğin bu kırmızı bölümü, belirli bir aktör için verileri depoladığımız
‫yer olabilir ve genellikle ikili veya onaltılı olarak gösterilen ve esasen sadece konum olan bir adrese sahiptir.
‫Buradaki tüm baytları, tüm birleri ve sıfırları saymaya başlarsanız, aslında tek tek birleri ve sıfırları
‫saymayız.
‫Sekiz adımda sayıyoruz ama bu çok önemli değil.
‫Baytları sayıyoruz.
‫Bu aslında başladığımız adres.
‫Aktörümüz hakkında konuşursak, her türün belirli bir boyutu vardır.
‫Yani aktörün şu kadar bayt veriye ihtiyaç duyacağını biliyoruz.
‫Bu da bize aktörümüzle ilgili verileri nerede bulacağımızı söyler.
‫Peki bu neden önemli?
‫Peki, aktörlere bir çekim yapmak isteyebileceğimiz duruma bir göz atalım.
‫Aynı verilere referans veren iki değişkene sahip olmak istiyoruz.
‫Naif durumda, sadece bunu kopyalayacağız.
‫Böylece my actor değişkenine ayrılmış bir bellek yığınımız olur.
‫Henüz hiçbir şey atamadığımız Your Actor adlı boş bir değişkene ayrılmış başka
‫bir bellek yığınımız var.
‫Ve sonra yapmak istediğimiz şey, aynı verileri içermelerini istediğimiz için, sadece birini diğerine atamaktır.
‫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
‫tüm bitlerin içine yerleştirmemizle sonuçlanır.
‫Dolayısıyla bu oldukça maliyetli bir işlem olabilir çünkü CPU'nuzun orijinal bellekteki her bir parçayı gözden geçirip
‫değerlendirmesi ve yeni konuma yerleştirmesi gerekir, bu da zaman alır.
‫Şimdi, işaretçi adı verilen bir şey kullanarak bunu aşmanın bir yolu var.
‫Yani burada, My Actor'ın tamamını saklamak yerine, tüm aktörü saklamayan a my actor veya
‫an actor a actor pointer adında bir değişkenimiz var.
‫Sadece bir eylemi bulabileceğiniz adresi saklar.
‫Böylece bir adresi saklamak için aslında çok daha az bellek kullanıldığını görebilirsiniz.
‫Ve sonra yaptığımız şey, sizin aktörünüzde benim aktörümün adresini saklamaktır, böylece veriyi kopyalamak
‫yerine orijinal aktöre işaret eder, bu nedenle işaretçi adı verilir.
‫Şimdi bu C++'daki gerçek sözdizimi değildir.
‫C++'da söz dizimi çok daha yoğundur.
‫Bir şeyin işaretçi olduğunu, türünden sonra bir yıldız koyarak söyleriz.
‫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
‫kullanırız. unreal'da işaretçi döndüren birçok işlev olduğu için henüz
‫bu adresi çok fazla kullanmayacağız.
‫Bu yüzden şimdilik bu işaretçileri oluşturmak yerine nasıl kullanacağımızı bilmemiz gerekiyor.
‫Dolayısıyla, sahnemizdeki diğer nesnelere erişmemizi sağlayan böyle bir işlev get owner'dır.
‫Peki bu neden bir bileşenimiz olduğunda, bir aktör tarafından sahiplenildiğinde geçerli oluyor?
‫Yani bu bileşenin aktörümüzle konuşmasını, konumunu almasını, konumunu ayarlamasını ve bunun gibi şeyler yapmasını
‫istiyorsak, o zaman bu aktöre bir işaretçi alabilmemiz gerekir.
‫Bir kopyasını almak istemiyoruz.
‫Aslında bunun bir kopyasını almak istemiyoruz çünkü aktörü değiştirmek istiyoruz.
‫Eğer bir kopya üzerinde değişiklik yapsaydık, bu değişiklik sahnede görünmezdi.
‫Dolayısıyla, bir aktöre işaretçi olan bir değişkeni saklayabilmemiz gerekir.
‫Bunu yapmanın yolu, az önce slaytlarda gördüğümüz gibi, bir A aktör tipine sahip olmaktır.
‫Ama sonra sonuna bir yıldız koyuyoruz, bu da bize bunun burada depolanan bir aktör olmadığını, bunun sadece
‫depolanan bir aktörün adresi olduğunu söylüyor.
‫Böylece aktörü alacağız ve bu sahibini çağıracağız ve sonra bunu get sahibini çağırmanın sonucuna
‫eşit olarak ayarlayacağız.
‫Yani get owner, bir sahip işaretçisi almanızı sağlayan bir aktör bileşeni işlevidir.
‫Sahibini gösteren bir aktör işaretçisi alın, bu satırın sonuna noktalı virgül koyun.
‫Ve burada sahip olduğumuz şey, bu belirli bileşene sahip olan bir aktörün adresini saklayan bir değişkendir.
‫Bu yüzden, bu değişkenin adresini yazdırarak bir şeyler yapmanız için size meydan okumak istiyorum.
‫Bu yüzden a aktör değişkenini kullanın ve biçimlendirdiğiniz yüzdeyi kullanın, günlüklerde belirtin.
‫Yani yüzde aslında işaretsiz bir tamsayı kullandığınız anlamına gelir.
‫Bu, negatif olamayan bir tamsayı anlamına gelir, bu da mantıklıdır çünkü belleği nerede bulacağımızdan
‫bahsederken adresler negatif olamaz ve sonra ne yazdırdığını bulun, gidin ve oynayın, günlük mesajına bakın,
‫ne yazdırdığına bakın.
‫Oynamayı bırakıp tekrar oynamaya başladığınızda farklı oyunlar arasında değişiyor mu?
‫Peki ya taşıyıcı birden fazla aktördeyse?
‫Konsolda birden fazla farklı adres mi yazdırılıyor?
‫Videoyu durdurun ve küçük bir araştırma yapın.
‫Tamam.
‫Tekrar hoş geldiniz.
‫Bu yüzden bu Yule günlüğüne gideceğiz ve nakliyeci sahibi, adres, kolon yüzdesi, siz diyeceğiz.
‫Yani işaretçi değerini koyacağı yer burasıdır.
‫Ve sonra gerçek işaretçiyi koyacağız.
‫Sahibini buraya getireceğiz.
‫Bu yüzden sahibinin adresini yazdıracak.
‫Gerçek olmayan bir yere gidelim.
‫Control alt f 11'e basın.
‫Derleme işlemi bittiğinde oynat tuşuna basalım.
‫Ve gördüğümüz şey, günlük mesajı taşıyıcı sahibi adresinin geldiği ve bize aslında
‫bu adres için çok büyük bir sayı verdiği.
‫Ya oynamayı bırakırsam ve sadece bir saniyeliğine tekrar oynarsam?
‫Adresin oldukça farklı olduğunu görebilirsiniz ve bunun nedeni, oynat düğmesine
‫her bastığımızda Unreal'ın sahnede sıfırdan başlayarak oynamaya hazır yepyeni bir aktör grubu oluşturmasıdır.
‫Bu yüzden play tuşuna her bastığımızda yeni adres konumları görüyoruz.
‫Ö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
‫en altına inersek ne olur?
‫Burada iki farklı adresin yazdırıldığını görebilirsiniz çünkü bellekte
‫iki farklı konumda depolanan iki farklı aktör vardır.
‫Bunlar iki adres ve bu iki adres arasında aslında birkaç megabayt fark olduğunu
‫görebilirsiniz, bu da size Unreal tarafından bellekte ne kadar çok bilgi depolandığını
‫ve ayrıca çok fazla kopya oluşturmamak için verimli olmanın neden önemli olduğunu anlatıyor.
‫Bu ders için bu kadar.
‫İşaretçilerle daha eğlenceli şeyler yapacağımız bir sonraki etkinlikte görüşmek üzere.