‫Merhaba ve hoş geldiniz.
‫Bu derste gevşek bir ekran görüntüleyeceğiz ve bu widget'ı oluşturmak
‫için bunu tamamen C++ içinden yapacağız.
‫Hadi içeri dalalım ve nasıl yapıldığını görelim.
‫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ı
‫arayüzleri görüntülemek istiyoruz.
‫Bu yüzden onlar için sürpriz olmadı.
‫Bu yüzden bir UI, bir UI widget'ı, bir UMG, gerçek dışı hareketli grafik widget'ı oluşturmamız gerekecek.
‫Öncelikle UI'yi depolamak için bir klasör oluşturarak bunu yapalım.
‫Ve zaten iki UI öğemiz olacağını biliyorum, bu yüzden sanırım burada bir UI klasörüm olacak ve sonra
‫buraya girip sağ tıklayalım ve sonra gidelim, bunu daha önce yapmalıydınız, ama hadi size yol göstereyim.
‫Kullanıcı arayüzü bölümüne gideceğiz, ardından widget blueprint'ini seçeceğiz
‫ve kullanacağımız önek WP alt çizgisi ve ardından lose screen olacak.
‫Şimdi C++'da bu tür şeyler için bazı temel sınıflar yapabilirsiniz, ancak bu bölümde bunu ele almayacağız.
‫Bunu yapmak genellikle gerekli değildir ve bu tür şeyleri Blueprint'te yapmak çok daha kolaydır.
‫Ç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,
‫bunu C++'ta yapmanın pek bir avantajı yoktur.
‫Bu durumda, durum böyle değildir, bu yüzden devam edebilir ve planları kullanabiliriz.
‫Sonuçta kullanıcı arayüzü görsel bir şeydir.
‫Şimdi bir araya getirmek için görsel bir araç kullanmak mantıklı çünkü widget'ların nasıl oluşturulacağını zaten biliyorsunuz.
‫O zaman bunu size bir kaybetme ekranı oluşturmanız için bir meydan okuma olarak vereceğim.
‫Oyuncunun kaybettiğini ve yeniden başlatmak üzere olduğumuzu açıklayan bir metin eklemek istiyoruz.
‫Bu metni muhtemelen ortalayacak şekilde konumlandırmak, görünür kılmak ve oyunda görünür olduğundan emin olmak istiyorum.
‫Yine de, dediğim gibi, yakında yeniden başlatma olacağını açıklayın.
‫Ve bu zorluğu denedikten sonra, bunu C++'dan nasıl ortaya çıkarabileceğimize bakacağız.
‫Bunun Blueprint'te nasıl yapıldığını daha önce görmüş olabilirsiniz.
‫Bunu C++ içinde nasıl yapabileceğimizi göreceğiz.
‫Videoyu durdurun ve bir deneyin.
‫Tamam, tekrar hoş geldin.
‫Şimdi gidip öncelikle bir metin oluşturacağım.
‫Bu yüzden sol taraftaki palette metin öğesini aramak ve onu getirmek istiyorum.
‫Burada oldukça basit ve yaratıcı olmayan diyalog yazısını kaybedersiniz olarak değiştireceğim ve kaybettiklerini
‫çok net hale getirmek için rengi, opaklığı ve / veya görünümü kırmızıya çevireceğiz.
‫Ve sadece biraz daha ovalayın ve yazı tipimizi genişletip boyutunu daha büyük olacak şekilde değiştireceğim.
‫Sonra metnimizin etrafındaki kutuyu genişleteceğim ve metnimizi ortalayacağım.
‫Gerekçelendirmeye giderek, metinde bir çizgiyi ortalayacağım.
‫Ve eğer genişletirsem, not içinde ortalanmış hizalama yapabileceğim başka bir yer olup olmadığına bakalım.
‫Bu yüzden gidip kutu boyutunu kabaca uygun hale getireceğim ve sonra hizalamama ve çapalarıma ve bunun
‫gibi şeylere gideceğim.
‫Sabitleyiciler için açılır menüyü seçeceğim ve ortaya sabitleme için ön ayarı seçeceğim çünkü yapmak
‫istediğim şey bu.
‫Hizalamamı 0 olarak ayarlamak istiyorum. 5 ve 0. 5, bu da temel olarak sol üst köşe yerine nesnenin merkezine
‫hizaladığımız anlamına gelir.
‫Çapayı tekrar yapacağım.
‫Tamam.
‫Bu pek yardımcı olmadı.
‫Ve sonra X pozisyonunu sıfır ve sıfırın yanına ayarlarsam, çünkü çapalarımı bu şekilde
‫ayarladım, o zaman kaybetme pozisyonum ortada bir yerde olacak ve ben sadece onu
‫biraz yukarı taşıyacağım.
‫X konumumu sıfırda, Y konumumu -50'de tutun, çünkü bazı ikincil metinler eklemek istiyorum, aslında diğer metni
‫burada çoğaltmak daha kolay olabilir çünkü zaten ihtiyacım olan tüm kuruluma
‫sahip.
‫Sadece biraz daha küçültmek istiyorum.
‫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
‫yapacağım.
‫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,
‫küçük bir çentik ve X konumunu sıfıra sıfırlamaya devam edin ve konumlandırmadan %100 memnun olun.
‫Sadece biraz daha yükselteceğim.
‫Shift tuşunu basılı tutarsam, hareket ettiğim eksene kilitleyebilirim, böylece aşağı yukarı bu şekilde merkezi
‫olur.
‫Tamam, bundan memnunum.
‫Şimdi gidip o şeyi ortaya çıkarmaya çalışmalıyız.
‫Bunu nasıl yapacağız?
‫Her şeyden önce, hangi widget sınıfını ortaya çıkarmamız gerektiğini ve bundan sonra bunu nerede
‫yapacağımızı bilmemiz gerekir.
‫Daha önce de söylediğim gibi, bunu yapmak için iyi bir yerin oyuncu kumandasının kendisi olduğunu düşünüyorum.
‫Ve oyuncu denetleyicisinde hangi sınıfı, hangi widget sınıfını ortaya çıkarmaya çalıştığımızı bilmemiz gerekecek.
‫Ş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.
‫Bunu yapmanın yolu, burada herhangi bir yerde düzenlenebilecek yeni bir özellik oluşturmaktır
‫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
‫bir yoludur.
‫Temel olarak, isterseniz type you sınıfını kullanabilirsiniz, ancak bu ne tür bir sınıf kullanabileceğimizi
‫kısıtlamaz.
‫Ve burada bunu yalnızca bir widget kullanmanızla sınırlamak istiyoruz.
‫Planınıza giderseniz, burada bir yere gidersek, oraya gittiğinizi görebilirsiniz.
‫Ana sınıf, üzerine önek koyduğunuzda bir widget kullandığınızı bildiğimiz bir widget kullanır.
‫Yani bu bir alt sınıf.
‫Ve sonra açılı parantezlerimizi bir widget kullandığınız bir sınıf olarak kullanacağız ve aslında herhangi
‫bir include yapmak yerine bunu burada bildireceğim, bu yüzden bir widget kullandığınız sınıf
‫ve sonra orada neler olup bittiğini gerçekten açık tutmak için buna lose screen sınıfı diyeceğiz.
‫Ş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
‫sadece biraz daha uzun sürer.
‫Şimdi aslında derleme bu aşamada başarısız olacaktır çünkü UMG modülünü dahil etmedik.
‫Bunu nasıl yapacağımızı bilmiyoruz.
‫Bu aşamada derleme konusunda endişelenmeyin ve videonun yaklaşık 9. dakikasında bu hatayı düzelteceğiz.
‫Şimdi C++'da, yapmak istediğimiz şey aslında bu widget'ı ortaya çıkarmak.
‫Bu yüzden bunu belki de zamanından önce yapmak isteyeceğiz.
‫Gerçekten önemli değil çünkü zamanlayıcı beklemiyor.
‫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
‫beklemeyiz, eğer kullanıcı arayüzünü hemen sonra ortaya çıkarırsak, bunu hangi sırada yaptığımızın gerçekten bir
‫önemi yoktur.
‫Bu yüzden yapmak istediğimiz şey, şu anda mevcut olmayan create widget adlı bir işlevi kullanmaktır.
‫Bu yüzden önce bir şey eklememiz gerekiyor.
‫Ve dahil edeceğimiz şey blueprint forward slash user widget ve bu widget oluşturma
‫fonksiyonuna erişmek için ihtiyacımız olan sınıf.
‫Ve temel olarak widget oluştur diyeceğiz.
‫Aslında, bunu sağlamak için neye ihtiyacımız olduğuna bir bakalım.
‫F 12'yi uygulamaya koyacağım.
‫Biraz karmaşık olduğunu görebilirsiniz, ancak burada bir şablon parametremiz var, bu temelde varsayılan olarak bir widget
‫kullanıyorsunuz, bu yüzden muhtemelen bunu sağlamamız gerekmiyor.
‫Ve sonra sahip olunan nesne ve oluşturmamız gereken sınıf ve daha sonra sağlamamız gerekmeyen bir widget
‫adı vardır ve daha sonra widget'a işaretçi olarak döner.
‫Aslında burada yapacağım şey, ona bir sahip nesnesi vermek olacak.
‫Artık widget'a yalnızca belirli şeyler sahip olabilir.
‫Bu şeylerden biri aslında oyuncu kontrolörüdür, bu yüzden sadece bunu geçirebiliriz.
‫Bir sonraki şey, bir widget kullandığınızda RT alt sınıfını geçmek istememizdir.
‫Neyse ki bunu başlık dosyasında zaten yapılandırdık, bu yüzden devam edip bunu içeri aktarabiliriz ve
‫satırın sonuna noktalı virgül koymadığım halde girintimin kendini düzeltmeye çalışmasını durduracağım
‫ve sonra gidip başka neler olduğuna bir bakalım.
‫İşte bu kadar.
‫Bu noktada sadece widget'ı döndürür.
‫Yapabileceğimiz şey size bir işaretçi göstermek, bir widget yıldızı kullanmak ve bu bizim kaybetme ekranımız olacak.
‫Bu yüzden ekran kaybetme dersimiz vardı.
‫Widget'ı oluşturduktan sonra, gerçek bir gevşek ekran haline gelir.
‫Yapmamız gereken bir sonraki şey bu kullanıcı arayüzünü görünür hale getirmek.
‫Bunu, gerçek olmayan bir deyişle görüntü alanına ekleyerek yaparız.
‫Ama önce, mavi ekranda bir fonksiyon çağırarak görüntü alanına ekleme yaptığımız için, bunun null pointer olmadığından
‫emin olmamız gerekir.
‫Peki kayıp ekran null pointer'a eşit değilse, neden null pointer olabilir?
‫Bu arada, size küçük bir meydan okuma, bakalım burada neden bir null pointer ile sonuçlanabileceğimizi bulabilecek
‫misiniz?
‫Bunun bir nedeni belki de ekran kaybetme sınıfını ayarlamayı unutmuş olmamızdır.
‫Ve eğer durum buysa ve geçerli bir mavi ekran sınıfı setimiz yoksa, o zaman create widget bizim için sadece
‫null pointer döndürecektir.
‫Bunun olmasını istemeyiz ve kesinlikle null pointer üzerinde bir fonksiyon çağırmak istemeyiz.
‫Bu yüzden ekran okunu kaybedeceğiz.
‫Ve sonra burada istediğimiz şey viewport'a ekle adlı bir işlevdir.
‫Bu da basitçe bunu yapacak, gidip ekrana ekleyecek ve böylece bu gevşek ekranı görebileceğiz.
‫Şimdi, devam edip bunu da derleyeceğim ve bir makaraya gidip oyuncu denetleyicisi
‫için planımızı açacağım.
‫Yani atıcı oyuncu kontrolörü burada.
‫Ve burada bir yerde henüz ortaya çıkmamış bir değişken görebilmeliyiz.
‫Belki de bazı derleme hatalarım vardı.
‫Gidip mesaj günlüğüne bir göz atalım.
‫Evet, burada birkaç derleme hatası görebiliyoruz, yani harici sembollerin eksik olmasıyla ilgili bu garip hatalar.
‫Sizinle ilgili bir şeyler söyleyen küçük bir görünümümüz varsa, şimdi mevcut olmayan bir widget kullanın,
‫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
‫biliyoruz.
‫Şimdi gidip basit shooter dot build dot CSS'imizi açarsak ve biraz daha fazla alan için terminali kapatırsam,
‫yapmamız gereken şeyin buraya yeni bir genel bağımlılık eklemek olduğunu görebilirsiniz.
‫Bunun sonuna UMG için bir genel bağımlılık ekleyeceğiz, yani yeni bir virgül.
‫Tırnak içine UMG yazacağız ve bu da temel olarak burada sahip olduğumuz include, yani blueprint forward slash kullanıcı
‫widget'ını kullanmamızı sağlayacak.
‫Tüm bu şeyler, dahil olan standart şeylerden ayrı bir modüldedir.
‫Bu yüzden gidip Unreal'a bu modülü C++'ımızda kullanmak istediğimizi söylememiz gerekiyor.
‫Devam edip inşa edelim ve çalışıp çalışmadığını görelim.
‫İşte bu başarılı görünüyor.
‫Editöre gidip atıcı oyun denetleyicimize geri dönersek, bazı nedenlerden dolayı düzgün bir şekilde yeniden yüklendiğini
‫sanmıyorum, bu yüzden burada editörde derlemeye basmak zorunda kaldım.
‫Şimdi atıcı oyuncu kumandasına geri dönüyoruz.
‫Sonunda ekran sınıfını kaybettiğinizi görebilirsiniz.
‫Oradaki açılır menüye tıklayıp AWP'yi seçebilir, alt çizgi ekranını kaybedebilir, derleyebilir, kaydedebilir
‫ve gidip kendimizi öldürtebiliriz.
‫Birkaç kez vurulacağız.
‫Bam, bam.
‫Ve işte oldu.
‫Lou ekranımız açıldı ve bize neler olduğunu, seviyenin 5 saniye içinde yeniden başlayacağını söyledi.
‫Ve öyle de oldu.
‫Öyle.
‫Artık sadece UMG grafiklerini nasıl oluşturabileceğinizi değil, aynı zamanda bunları Blueprint yerine C++'dan nasıl üretebileceğinizi
‫de biliyorsunuz.
‫Bir sonraki derste, olaylara daha az kötümser bakacağız ve bu maç için de bazı kazanma
‫koşulları yaratıp yaratamayacağımızı deneyeceğiz.
‫Orada görüşürüz.