‫Bu derste, oyun modundan oyunun sona erdiği bilgisini alacak ve oyuncu öldükten sonra
‫5 saniye sonra seviyeyi yeniden yükleyen bu yeniden başlatma davranışını yaratacak bir oyuncu
‫denetleyicisi oluşturacağız.
‫Hadi içeri dalalım ve nasıl yapıldığını görelim.
‫Dolayısıyla, oyun gerçekten bittiğinde, oyuncu denetleyicimize bildirimde bulunmamız ve ayrıca C++'mızda bir oyuncu denetleyicisine
‫sahip olmamız gerekir, böylece seviyeyi yeniden başlatmamıza izin verme davranışını uygulayabiliriz.
‫Yapılacak ilk şey, bu nokta öldürüldüğünde, her şeyden önce, ayrım gözetmeksizin günlüğe kaydediyoruz.
‫Oyunun bitip bitmediğini kontrol etmek istiyoruz.
‫Şimdi, iki senaryo var.
‫Biri kazandığımız, diğeri kaybettiğimiz yer.
‫Kaybetmek ilk ele alacağım konu çünkü en kolayı.
‫Öldürülen piyon kaybettiğiniz oyuncuysa, bu kadar.
‫Bu oyun modunun farklı yinelemeleriyle birden fazla cana sahip olmayı seçebilirsiniz, ancak ben bunu yapmayacağım.
‫Sadece bekar bir hayatım olacak.
‫Eğer ölürsen, oyun biter.
‫Yeniden başlatmak isteyebilirsiniz.
‫Peki bu piyonun bir oyuncu kontrolörü olup olmadığını nasıl kontrol edeceğiz?
‫Bu oldukça açık.
‫Sadece bir cast yapabiliriz, bu yüzden bir oyuncu denetleyicisine ve öldürülen piyon için bir cast yapacağız.
‫Ve sonra eğer bu null değilse.
‫Şimdi bir işaretçi alalım, bir oyuncu denetleyicisi işaretçisi, ona oyuncu denetleyicisi diyelim ve bu işaretçinin sonucunu
‫burada saklayalım.
‫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
‫oyuncu olduğunu ve oyuncu için oyunun bittiğini biliyoruz.
‫Yapmak istediğimiz şey, bu oyuncu denetleyicisi yöntemini çağırmaktır.
‫Bir oyun bitti yöntemi olduğunu zaten ima etmiştik.
‫Şuna bir göz atalım.
‫Eğer bir P kontrolü yaparsak ve oyuncu kontrolörüne bakarsak ve bir oyun sona erdi arayacak olursak, burada
‫oyun sona erdi adında sanal bir yöntem olduğunu ve bir oyun sonu odağı olduğunu görebilirsiniz.
‫Varsayılan olarak oyunun sonunda hangi aktöre odaklanmalıyız, bu null pointer'dır ve muhtemelen kullanacağımız
‫şey de budur.
‫Ve sonra diyeceğiz ki, kazanan bu mu?
‫Temel olarak, oyuncunun kontrol etmesine ve kazanıp kazanmadığını bilmesine izin vermelisiniz.
‫Ve bu durumda bunu söylemek oldukça kolaydır.
‫Hayır, yapmadılar.
‫Bu yüzden bir oyun denetleyicisi yapacağız ok oyunu sona erdi, sonra oyun sonu odağı için null pointer
‫koyacağım çünkü bu özelliğe gerçekten ihtiyacımız yok ve sonra kazanan.
‫Bu basitçe yanlış olacak.
‫Bu kazanan oyun kumandası değil çünkü az önce ölen kumanda.
‫Şimdi sizin için biraz zorlu bir görevin uygulama zamanı.
‫Oyun bir oyun kumandasında sona erdi.
‫Bu, bir C++ oyuncu denetleyicisi oluşturmamız, blueprint alt sınıfını oluşturmamız, oyun modumuzdan varsayılan olarak bu blueprint
‫alt sınıfını ortaya çıkarmamız ve ardından devam edip geçersiz kılmamız gerektiği anlamına gelir.
‫Oyun sona erdi ve gerçekten aldığımızı kontrol etmek için oraya bir günlük mesajı koyun.
‫Bu oyun doğru zamanda sona erdi.
‫Videoyu duraklatın ve deneyin.
‫Tamam.
‫Tekrar hoş geldiniz.
‫Birinci adımda, C++ oyuncu denetleyicisini oluşturun, yeni bir C++ sınıfı oluşturun ve ardından gidip oyuncu denetleyicisini
‫arayın.
‫Sonra, buna atıcı oyuncu kontrolörü diyeceğiz.
‫Devam edin ve bu sınıfı oluşturun.
‫Bu tamamlandıktan sonra, planlarımıza gitmek ve buna dayalı bir plan sınıfı oluşturmak istiyoruz.
‫Bu yüzden temel olarak atıcı oyuncu denetleyicisini seçmek istiyoruz ve buna bip alt çizgi atıcı
‫oyuncu denetleyicisi diyeceğiz.
‫Bu şu anda gerçekten gerekli değil, ancak daha sonra, bazı UI varlıklarını bu oyuncu denetleyicisine
‫bağlamak isteyeceğiz.
‫Yani orada hazır olacak.
‫Sonra bip, daha fazla oyun moduna gideceğiz ve bunu yerleştireceğiz çünkü varsayılan oyuncu denetleyicisi sınıfını oyuncu
‫denetleyicisinden bip alt çizgi atıcı oyuncu denetleyicimize değiştirmek istiyoruz.
‫Güzel.
‫O zaman oyunumuzun sona erdiğini geçersiz kılmak istiyoruz.
‫Şimdi oyuncu denetleyicisine gidip gitmediğimize bakalım.
‫Bunun herkese açık bölümde olduğunu görebiliyoruz.
‫İmza burada.
‫Kopyalayalım.
‫Atıcı oyun denetleyicimiz H'ye gidin ve genel oluşturun.
‫Bu sanal boşluğa oyun sona erdi.
‫Güzel.
‫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ı.
‫Daha sonra yapabileceğimiz şey, devam etmek ve bunu uygulamaktır.
‫Süper hatırlamak için çağırmak istediğimiz kontrol kaydırması p.
‫Ve biz de oyunu bu şekilde bitirmek istiyoruz.
‫Ve oyun sonu odağında geçmek istiyoruz ve B kazanıyor ve sonra günlüğe kaydetmek istiyoruz.
‫Yani kayıt yapıyorsun.
‫Oradaki makromu kullan.
‫İşimiz bitti.
‫Sonunda çıkan günlük mesajı olacak.
‫Şimdi derleyelim ve çalışıp çalışmadığını görelim.
‫Çıktı günlüğüne gideceğiz.
‫Oynat tuşuna bas, git ve öldür.
‫Temel olarak sağlıklı yavaşça aşağı iniyor ve sonra bir mesaj görmeliyiz.
‫Mesajı alıyor muyuz?
‫Hayır.
‫Bir bakalım.
‫Buradaki oyuncu kontrolörü nedir?
‫Bip alt çizgi atıcı oyuncu kumandası doğru kumanda gibi görünüyor.
‫Geçersiz kılma oyunumuz sona erdi.
‫Şimdi burada bir hata görüyorum.
‫Şimdi, bazılarınızın fark etmiş olabileceği ve ekrana bağırıp çağırdığı bir
‫şey var, burada döküm yaptığımız oyuncu denetleyicimiz var ve ben bunu oyuncunun gerçek
‫-- ile karıştırıyorum.
‫Yani burada yapmak istediğimiz şey, öldürülen kişinin kontrolörünü bulmak.
‫Yani -- öldürülen nokta get controller Aron yani arrow get controller ve sonra bunu player controller'a atmak istiyoruz
‫ve eğer bu null ise, tamam, bu çalışmalı.
‫Öyleyse devam edelim ve bunu deneyelim.
‫Devam et ve oynat tuşuna bas.
‫Yine kendimizi öldürteceğiz.
‫Ve bu sefer herhangi bir günlük mesajı da almıyoruz.
‫Ve bu kez ince bir nedeni var.
‫Bunun nedeni kontrolörden ayrılıyor olmamızdır.
‫Buna "öldür" demeden önce.
‫Bu yüzden kontrolü ele geçirmeye çalıştığında - aslında bu boş, kontrol yok - artık.
‫Dolayısıyla bu bildirimi kontrolörden ayırma işlemini yapmadan hemen önce yapmamız gerekir.
‫Bu, oyun modumuzu ele geçiren çizgiyi yukarı taşımayı da içeriyor.
‫Bunun önemli olacağını düşünmemiştim.
‫Ama şimdi düşününce, evet, tabii ki öyle.
‫O zaman kendi seviyemize geçelim ve oynayalım.
‫Gidip vurulalım.
‫Ve bu yapıldıktan sonra, istediğimiz gibi yazdırmayı bitirdiğimizi görebilirsiniz.
‫Bu yüzden yol boyunca birkaç aksaklık yaşadık.
‫Yarışmada bunu alamadıysanız sizin suçunuz değil.
‫O noktaya kadar diğer her şeyi doğru yaptınız.
‫Bu harika.
‫Umarım hata ayıklama konusunda bir şeyler yapmışsınızdır, ancak bu konularda takıldıysanız endişelenmeyin.
‫Burada yapmak istediğim son şey, oyunu gerçekten bir zamanlayıcıda yeniden başlatmak.
‫Şimdi, bunu yapabilmemizin yolu oldukça basit çünkü oyuncu kontrolörünün aslında bir yeniden
‫başlatma yöntemi var.
‫Yani eğer gidip buna bir göz atarsak, yeniden başlatma seviyesi olmalıdır.
‫Aramak istediğimiz kişi bu ve bunu bir zamanlayıcıda yapmak istiyoruz.
‫Zamanlayıcıları daha önce tekrar eden şeyler yapmak için kullandık, ancak bunu sadece bir eylemi belirli bir miktar geciktirmek
‫için de kullanabiliriz.
‫Bu yüzden atıcı oyuncu kontrolörü H'ye gideceğim ve burada bir özel mülk oluşturacağım.
‫Özel mülk, herhangi bir yerde düzenlenen mülk olabilir.
‫Float.
‫Bu yeniden başlatma gecikmesi olacak.
‫Bunun için neden bir plan tabanına ihtiyacımız olduğunu şimdiden anlayabilirsiniz.
‫5/2 gecikme vereceğim.
‫Sonra C++'a geçeceğim ve bir get timer world timer manager yapmak isteyeceğiz.
‫Sonra da bunu yapabiliriz.
‫O zaman eklememiz gerekiyor.
‫Yani hash include ve zamanlayıcı yöneticisi olacak.
‫H O zaman DOT operatörünü kullanabilmeliyiz çünkü buradaki dönüş tipi bir referanstır ve bir zamanlayıcı
‫ayarlayacağız ve burada bir zamanlayıcı tanıtıcısı aktarmamız gerekiyor.
‫Bu yüzden özel bir bölümde gidip bir tane oluşturalım.
‫Yani bir F zamanlayıcı tutacağı olacak, ben buna yeniden başlatma zamanlayıcısı diyeceğim.
‫O zaman bu, ayarlanmış zamanlayıcımıza aktardığımız tanıtıcı olacaktır.
‫Buradaki beşinci imzada ihtiyacımız olan bir sonraki şey, aslında çağırmak istediğimiz nesneye sahip olmaktır, ki bu
‫sadece bu olacaktır.
‫Ve sonra, bence sadece yöntemin kendisi olmalı.
‫Yani bunu ampersand yaparak yapabiliriz.
‫Ve sonra aslında A oyuncu denetleyicisinde tanımlanmış olan ve çağırmak istediğimiz yöntem, yeniden
‫başlatma seviyesi yöntemidir.
‫Yani bir oyuncu kumandası.
‫Cullen.
‫Cullen yeniden başlatma seviyesi ve ardından yeniden başlatma gecikmesi olarak tanımladığımız gecikmeyi aktarmamız
‫yeterlidir.
‫Bunu yapın, sonuna noktalı virgül koyun ve umarım 5 saniye sonra kendimizi yeniden başlatabiliriz.
‫Şimdi tüfeğimizi açarak ve biraz daha ölümcül hale getirerek testi biraz daha kolaylaştıracağız.
‫Bu yüzden varsayılan ayarlara gideceğim, hasarı 50 yapacağım, böylece iki atışla öldürüleceğiz.
‫Hadi gidip oynat tuşuna basalım.
‫Kendimizi çabucak öldürelim.
‫Ve 5 saniye sonra, umarım yeniden başlattığımız seviyeyi yeniden başlatmalıyız ve seviyeye geri dönmeliyiz.
‫Yani zamanlayıcımız beklediğimiz gibi çalışıyor.
‫Daha sonraki sürümlerde, yeniden başlatmak yerine, göreceğiniz şeyin buna benzeyen ve seyahat hatasından bahseden
‫ve UUID, PID, sandbox, falan filan hakkında bir şeyler söyleyen bir hata mesajı olduğunu göreceksiniz.
‫Yeniden başlatmaya çalıştığımızda ve yeniden başlatmamızın çalışıp çalışmadığını kontrol
‫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
‫olarak oynamamız gerekiyor.
‫Bağımsız bir oyun olarak oynarsanız, başlatılması biraz daha uzun sürer, ancak yeniden
‫başlatma beklendiği gibi çalışacaktır.
‫Ve seviyenin yeniden yüklendiğini görüyoruz.
‫Şimdi, açıkçası bunun gerçekleşeceğine dair pek bir belirti yok.
‫Bu yüzden sonraki derslerde kullanıcı arayüzüne bakacağız.
‫Orada görüşürüz.