‫Merhaba ve hoş geldiniz.
‫Bu derste, istediğimiz herhangi bir oyun modunda çağrılabilecek sanal -- öldürülmüş
‫bir yönteme sahip olmamız nedeniyle oluşturabileceğimiz olası oyun modlarından sadece biri olacak olan katil
‫bir mobil oyun modu oluşturacağız.
‫Şimdi bu sanal yöntemi nasıl uygulayacağımızı görelim.
‫Bu yüzden oyunumuzun sona ermesini istiyoruz.
‫Bir oyunun sona ermesi ne anlama gelir?
‫Bu, tek olduğumuz ya da kaybettiğimiz bir duruma girdiğimiz anlamına gelir.
‫Bazı kullanıcı arayüzlerini kullanarak oyuncuyu bilgilendiriyoruz.
‫Onlara belki yeniden başlatma ve tekrar oynama seçeneği sunuyoruz.
‫Bu çizgide bir şey.
‫Şimdi bununla ilgili sınıflar tipik olarak bir oyun modudur.
‫Oyun modu, kimin kazandığı ve kimin kaybettiği gibi oyunla ilgili kurallara karar vermekten sorumludur.
‫Bunun için de kimin öldürüldüğünü bilmemiz gerekecek.
‫Bu yüzden burada Piyon Öldürüldü adında bir sanal metodumuz olacak ve bu metot,
‫ölen ister yapay zeka ister oyuncu olsun, öldüğünde nişancı piyonumuzdan çağrılacak.
‫Dahası, buraya küçük bir karmaşıklık eklemek istiyorum; ana nişancı oyun modumuzdan
‫türetilmiş farklı oyun modlarımız olacak.
‫Bu oyun modunu uygulayacaklar.
‫Ok burada bu anlama geliyor.
‫Okun gittiği yol genellikle biraz mantıksızdır ama hepsini öldürün.
‫Oyun modu, nişancı oyun modundan miras alınır ve saymak ve oyunun kurallarına farklı şekilde karar vermek için
‫öldürülen piyonu geçersiz kılar.
‫İşte bu yüzden ana atıcı oyun moduna sanal bir piyon öldürme yöntemi koymak ve ardından kendimiz için
‫uyguladığımız oyun modu olacak olan tümünü öldür oyun modunda bunu tekrar uygulamak veya geçersiz
‫kılmak istiyorum.
‫Ve belki de seviyedeki düşmanların hepsini öldürmek yerine sadece belirli bir miktarını
‫öldürmek istediğiniz farklı oyun modları yapmayı seçebilirsiniz.
‫Belki bayrak kapmaca, farklı bir şey.
‫Ama temelde olacak olan şey, nişancı -- nişancı oyun modu türüne sahip
‫oyun modunu bulacak ve onu -- öldürdü diyecek.
‫Ve sonra gerçekte orada bulunan uygulamaya bağlı olarak, geçersiz kılma yoluyla
‫uygulamaya gidecektir.
‫Şimdi, buradaki bir başka karmaşıklık da, kullanıcı arayüzü mantığımızın ve yeniden başlatma mantığımızın, oyun modu gibi
‫global bir şeyden ziyade, genellikle oyuncunun yetkisinde olan oyuncu denetleyicisi kullanıcı arayüzünde gerçekleşmesi gereken
‫bir şey olmasıdır.
‫Bu özellikle çok oyunculu oyunlarda geçerlidir çünkü oyun modu aslında oyuncunun makinesinde
‫değil, sadece sunucuda bulunur.
‫Bu yüzden herhangi bir kullanıcı arayüzü öğesi oyuncu kontrolöründe devam etmelidir.
‫Bu çok oyunculu bir oyun olmadığı için bu konuda endişelenmemize gerek
‫yok, ancak sınıfları Unreal'da kullanılmaları beklenen amaçlar için kullanmak yine de iyidir.
‫Dolayısıyla, oyuncu denetleyicisi, gerçek kök oyuncu denetleyicisi sınıfı, özellikle bu amaç için game has
‫ended adlı sanal bir yönteme sahiptir, böylece oyun modu bu yöntemi çağırabilir ve kullanıcı arayüzü, yeniden başlatma gibi
‫şeyleri yapmak için kendi atıcı oyuncu denetleyicimizde uygulayabiliriz.
‫Ancak oyunun bittiğine karar verdiğimizde bunu oyun modumuzdan çağırmamız gerekecek.
‫Bu yüzden kök oyuncu kontrol cihazında sanal oyun sona erdi diyeceğiz.
‫Ve sonra bu kök oyuncu kontrolörü aslında bir nişancı olduğu için, oyuncu kontrolörü geri dönecek
‫ve arayacaktır.
‫Bu oyun sona erdi.
‫Dolayısıyla, nişancı piyonumuzdan nişancı oyun modu aracılığıyla katil daha fazla oyun moduna, oyuncu kontrolörüne
‫ve nişancı oyuncu kontrolörüne çağıracağımız dolambaçlı bir yol gibi görünüyor.
‫Ancak bu, kullanıcı arayüzünü farklı şekillerde, farklı seviyelerde gösterecek farklı oyuncu kontrol cihazlarını karıştırıp
‫eşleştirebileceğimiz konusunda bize çok fazla esneklik sağlıyor.
‫Farklı şekillerde çalışacak farklı oyun modlarını karıştırıp eşleştirebiliriz
‫ve bu şekilde tasarlamamın nedeni de bu.
‫Bizim projemiz için biraz abartılı olsa da, bunun Capture the Flag oyun modları ve farklı türde oyuncu kontrolörleri
‫ile diğer projelere nasıl genişletilebileceğini gösteriyor.
‫Öyleyse bunu uygulamaya çalışalım.
‫Gidip öncelikle bir rota oyun modu bulacağız.
‫Bir C++ projesinden başladığım için zaten oluşturulmuş bir tane var.
‫Basit bir nişancı oyun modu tabanımız var ve burada yapmak istediğim şey, void döndürecek
‫bir public fonksiyon oluşturmak ve bu fonksiyon -- öldürülecek ve biz de burada öldürülen --'i içeri aktarmak zorunda
‫kalacağız.
‫Yani bu şekilde öldürülen bir yıldız olacak.
‫Başlangıçta bunu sanal bir yöntem haline getireceğiz ve burada esasen
‫hiçbir şey yapmayan temel bir uygulama oluşturacağız.
‫Sonra bir alt sınıf oluşturacağız.
‫Yani yeni C++ sınıfı, tüm sınıfları gösterecek ve temel sınıfımız olarak atıcı, basit atıcı oyun
‫modu tabanımızı arayacağız.
‫Buna "hepsini öldür" oyun modu adını vereceğiz ve devam edip bu sınıfı oluşturacağız.
‫Sonra bu derlendiğinde, bir saniyeliğine geçiş yapmak ve nişancı karakterimize gitmek istiyorum.
‫CP Ve burada hasar alma yönteminde bizim ölü olduğumuzu görebilirsiniz.
‫Şimdi eğer bu ölmüşse, yapmak istediğim şey oyun modumuzu ele geçirmek ve -- öldürüldü --
‫demek.
‫Bunu yapmanın yolu, oyun modunu almak için get world'ü çağırmakla başlıyoruz, sonra
‫get auth oyun modu.
‫Ve sonra yapmak istediğimiz şey, bu oyun modunun doğru türde olması, yani basit, kök olan, basit nişancı oyun
‫modu, daha sonra bu karakteri değiştirmemize, bayrağı ele geçirme oyun modları gibi farklı oyun
‫modlarıyla kullanmamıza izin veriyor.
‫Bunu yapabilmemizin yolu, açılı parantezleri tam burada tüm oyun modlarını al kısmında kullanabiliriz
‫ve basit bir nişancı oyun modu yapacağız ve bunu en üste eklememiz gerekecek.
‫Yani hash, basit nişancı oyun modu temelini içerir.
‫Yani sınıfın adını tam olarak doğru anlayamadım?
‫Sanırım öyle.
‫Basit bir nişancı oyun modu tabanı olacak.
‫Biz de bunu elde etmeye çalışıyoruz.
‫Ve devam edip bunu bir değişken işaretçisinde saklayabiliriz, buna oyun modu diyelim.
‫Ve sonra yapmak istediğimiz şey, bu yeni satırda, muhtemelen buna sahip olduğumuzu ve bunun bir null pointer olmadığını kontrol
‫etmek istiyoruz.
‫Yani oyun modu boş bir işaretçiye eşit değildir.
‫Ve sonra null pointer'a eşit değilse, oyun modu ok piyonu öldürüldü ve piyon öldürüldü
‫demek istediğimiz yer burasıdır.
‫Yani artık oyun modu bir piyonun öldürüldüğünün farkında.
‫Hepsini öldür oyun modunu geçersiz kılabilmeniz için küçük bir mini meydan okuma.
‫Öldürüldüğünde oturumu kapatın ve bunu haritanızda varsayılan oyun modu olarak ayarlayın.
‫Umarım bu küçük meydan okumayı denemişsinizdir.
‫Devam edeceğiz ve uygulayacağız.
‫Bu yüzden bunu basit nişancı oyun modu tabanımızın genel bölümünü kopyalayarak yapacağım ve tüm
‫bunları takip etmek zor.
‫Daha sonra bu oyun modundan miras kalan hepsini öldür oyun modu tabanımıza gideceğiz.
‫Sanal yöntemi yapıştıracağız ve bu yöntemi doğru şekilde geçersiz kıldığımızdan emin olmak için override
‫anahtar sözcüğünü ekleyeceğiz.
‫Daha sonra KML oyun modu tabanımız için C++'da bir uygulama oluşturacağım.
‫Bu günlük mesajını almamız gereken yer burasıdır.
‫Ve çok dikkatli olmak gerekirse, uygulamada bir şey olmadığını biliyoruz, ama asla bilemezsiniz.
‫İşler daha sonra değişebilir ve bombadan ısırılabiliriz.
‫Bu yüzden öldürülen bir piyon yapmak istiyoruz.
‫Süper öldürüldü.
‫Mantıklı.
‫Ve sonra burada temel olarak bir -- öldürüldüğünü söyleyen bir giriş yapmak istiyoruz ve bunun işe yarayıp yaramadığını
‫Unreal'e gidip derleyerek, ardından araç çubuğundaki planlar öğesine gidip proje ayarlarında
‫varsayılan oyun modumuzu seçerek görebiliriz.
‫Oyun modunu, temel sınıfı seçersek, bunun KML tabanlı oyun modu olmasını isteriz.
‫Temel olarak, devam edin ve bunu yapın.
‫Aslında, gidip seçtiğimizde yapmamızı istediğimiz şey tam olarak bu değil.
‫Aslında bunun bir plan çocuğu olmasını istedik ve zaten pek çok şeyi ayarlanmış bir plan çocuğumuz
‫var.
‫Bu yüzden yeniden ebeveynlik yapalım.
‫Köklere gideceğiz, burada sahip olduğumuz BP shooter oyun modunu bulacağız.
‫Bu BP'yi yeniden adlandıracağız, hepsini öldür oyun modu ve sonra bunu açabilir, pencereyi kenetleyebilir, tam
‫plan düzenleyicisini açabilir, sınıf ayarlarına gidebilir ve üst öğeyi KML oyun modu, C++ olarak değiştirebiliriz.
‫Ve bu şekilde, mesajımıza çıktı günlüğümüze gidip oynat düğmesine basarsak ve ardından bir
‫karakteri öldürürsek doğru kodu çalıştırıyor olmalıyız, bir sorunumuz var doğru kuruluma sahip görünmüyor.
‫Dolayısıyla, sınıf varsayılanlarımıza geri dönersek ve varsayılan -- sınıfını BP atıcı karakteri olarak değiştirirsek,
‫bu doğru olacaktır.
‫Yanlış olması ihtimaline karşı kaydedin ve derleyin.
‫Ve sonra buraya bıraktığım planları kontrol edin.
‫KML oyun modunu seçti, C++ olanı.
‫Bu yüzden aslında burada blueprint olanı seçmek istiyoruz ve devam edip play tuşuna basıyoruz.
‫Şimdi piyonumuzu bulduk.
‫Devam edip bu adamı öldürebiliriz ve bir piyonun öldürüldüğünü log mesajında görebilirsiniz.
‫Yani bu harika bir şekilde çalışıyor.
‫Şimdi bir sonraki derste, bunun ikinci kısmına bakacağız, yani oyunu gerçekten
‫bitirmek istediğimizde ve oradan yeniden başlatabilmek için oyun sona erdi diyeceğiz.
‫O konferansta görüşürüz.