Bir kaybolan platformlar serisi, engelli parkurlar gibi platformlu oyun modlarının başlıca unsurları arasındadır. Bunlar oyuncuların bir dizi platform arasındaki sıçrayışları zamanlamasını gerektirir, aksi takdirde oyuncu düşer ve baştan başlamak zorunda kalır.
Bu eğitimi takip ederek Fortnite İçin Unreal Editor (UEFN) içinde Verse ile oluşturulmuş bir cihazı kullanarak sırayla görünen ve kaybolan bir platform serisi oluşturmayı öğreneceksin.
Kullanılan Verse Dili Özellikleri
Dizi: Dizi türü ile platform referanslarını hızlı erişim için ve kod yinelemelerini önlemek amacıyla bir arada depolayabilirsin.
Döngü: Platformların görünme ve kaybolma döngüsü, oyun başladığında başlamalı ve oyun bitene kadar devam etmelidir. Bu örnekte bu davranışın Verse
döngüifadesi ile nasıl oluşturulacağı gösteriliyor.Blok:
Blokifadesiyle birden fazla ifadeyi sırayla yürütülecek şekilde gruplandırabilirsin.For:
Forifadesiyle dizindeki her platform üzerinde yineleme yapabilirsin.Sync:
Syncifadesi ve yapılandırılmış eşzamanlılık ile aynı anda birden fazla asenkron ifadeyi yürütebilirsin.
Kullanılan Verse API’leri
Sleep():Sleep()API’si ile platformların görünmezlik ve görünürlük durumlarında ne kadar süreyle kalacağını seçebilirsin.Düzenlenebilir Özellikler: Platformların davranışı için üç adet gecikme ve platformlara dört adet cihaz referansı olmak üzere yedi adet Verse ile oluşturulmuş bir cihaz özelliği UEFN’de kullanıma sunulur, böylece bu özellikleri Editör’de düzenleyebilirsin.
Talimatlar
Düzenli aralıklarla kaybolan ve görünen bir platform serisi oluşturmak için aşağıdaki adımları izle. Tam kod, referans olması için bu kılavuzun sonuna eklenmiştir.
Bölümü Kurmak
Bu eğitimde başlangıç noktası olarak Verse Başlangıç Şablonu kullanılmaktadır. Başlamak için Verse Cihazı özellik örneğinden yeni bir proje oluştur.
Bu örnekte aşağıdaki nesne ve cihazlar kullanılıyor.
1 adet Oyuncu Doğma Karesi Cihazı: Bu cihaz, oyuncunun oyun başlangıcında nerede doğacağını belirler.
6 x Kreatif Nesne: Kreatif nesneler, platformun görünürlüğünü ve çarpışmasını değiştirmek için
Hide()veShow()gibi Verse ile çağırabileceğin çeşitli davranışlara sahiptir. Bu eğitimde oyuncu etkileşimli platform olarak Airborne Hoverplatform A kullanılmaktadır. Bunu deneyiminin ihtiyaçlarına göre değiştirebilirsin.
Bölümünü ayarlamak için şu adımları izle:
Sahnene bir adet Airborne Hoverplatform A ekle. Zeminin üzerine yerleştir, böylece oyuncu kaybolan platformdan zamanında atlamazsa düşecektir. Anahat Düzenleyicisi’nde platformu SynchronizedPlatform1 olarak adlandır.
Bir çizgi oluşturmak için platformu birkaç kez çoğalt. Ardından Oyuncu Doğma Karesi cihazını oyuncunun başlamasını istediği platforma yerleştir. Tamamlanmış ayarlar şu şekilde görünmelidir:
Cihazı Oluşturma
Bu örnekte platformların görünürlükle görünmezlik arasındaki geçiş davranışını tanımlamak için Verse ile oluşturulmuş bir cihaz kullanılır. Verse kullanarak bu cihazı oluşturmak için aşağıdaki adımları izle.
Platform_series adlı yeni bir Verse cihazı oluştur. Verse’te yeni bir cihazın nasıl oluşturulacağını öğrenmek için Verse Kullanarak Kendi Cihazını Oluşturma bölümüne bakabilirsin.
Platform_series cihazını İçerik Tarayıcısı’ndan bölüme sürükle.
UEFN’de Cihaz Özelliklerini Düzenleme
Bu bölümde, editörde özelleştirebilmen için cihaz özelliklerinin UEFN'e nasıl açılacağı gösterilmektedir:
Platformların ne kadar süreyle görünmez/görünür olması gerektiğini depolayacak
HeadStart,AppearDelayveDisappearDelayadlı üçkayansabit.Bölüme yerleştirdiğin kreatif objelere yönelik cihaz referansları.
Önceki kısımda oluşturduğun platform_series cihazından bu özellikleri kullanıma açmak için aşağıdaki adımları izle.
Verse Gezgini’ni aç ve platform_series.verse dosyasına çift tıklayarak kodu Visual Studio Code ile aç.
Platform_seriessınıf tanımına aşağıdaki alanları ekle:HeadStartadlı düzenlenebilir birkayan değer. Bu, platformlar görünmeye başladıktan sonra ve platformlar kaybolmaya başlamadan önce kaç saniye süreyle bekleneceğini belirtir. Bu değeri2,5veya iki buçuk saniye olarak başlat.Verse# How long to wait in seconds after platforms start appearing # before they start disappearing. @editable HeadStart:float = 2.5AppearDelayadlı bir düzenlenebilirkayan değer. Bu, bir sonraki platform görünmeden önce kaç saniye süreyle bekleneceğini belirtir. Bu değeri1,0veya bir saniye olarak başlat.Verse# How long to wait in seconds before the next platform appears. @editable AppearDelay:float = 1.0DisappearDelayadlı bir düzenlenebilirkayan değer. Bu, bir sonraki platform kaybolmadan önce kaç saniye süreyle bekleneceğini belirtir. Bu değeri1,25veya bir ve çeyrek saniye olarak başlat.Verse# How long to wait in seconds before the next platform disappears. @editable DisappearDelay:float = 1.25DisappearingPlatformadlı bir düzenlenebilircreative_prop. Bu, kaybolup görünecek olan bölüm içi platformu temsil eder. Yazdığın kod henüz bölümde bu objeye bir referans içermediğinden, bunu boş bir arketipcreative_prop{}ile örneklendirirsin. Bu referansı daha sonra kayan platformuna atayabilirsin.Verse# The in-level platform that disappears and reappears. @editable DisappearingPlatform:creative_prop = creative_prop{}
Platform_seriessınıf alanların aşağıdaki gibi görünmelidir:Verse# A Verse-authored creative device that can be placed in a level platform_series := class(creative_device): # How long to wait in seconds after platforms start appearing # before they start disappearing. @editable HeadStart:float = 2.5 # How long to wait in seconds before the next platform appears. @editableKodlardan editöre
AppearDelaygibi değerleri göstermek için@editableözniteliğini kullanmak yararlıdır. Bu, her seferinde Verse kodunu yeniden oluşturmak zorunda kalmadan UEFN'deki değerlerini özelleştirmeni sağlar, böylece hızlı bir şekilde yineleyebilir ve oyun deneyimine uyan değerleri bulabilirsin.Kodu Visual Studio Code içinde kaydet.
UEFN araç çubuğunda, bölümdeki platform_series cihazını güncellemek için Verse’e tıklayıp ardından Verse Kodu Oluştur’a tıkla.
UEFN’deki Anahat Düzenleyicisi panelinde cihazın Ayrıntılar panelini açmak için platform_series cihazını seç.
Platform Serisi’nin altındaki Ayrıntılar panelinde, obje seçiciye tıklayarak ve görünüm penceresindeki platform cihazını seçerek DisappearingPlatform’u SynchronizedPlatform1 (bölüme eklediğin kreatif nesne) olarak ayarla.
Platformu Gizleme ve Gösterme
Bölümü ve birinci platformu ayarladığına göre, artık platformu gösterme ve gizleme işlevini ekleyelim. Bu davranışı platform_series cihazına eklemek için aşağıdaki adımları izle:
Creative_propsınıfının görünürlüğünü açıp kapatmak için iki metot vardır:Hide()veShow(). Visual Studio Code’daOnBegin()içinde,Hide()çağrısı yap ve ardındanDisappearingPlatform’undaShow()çağır.Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= # Hide the platform. DisappearingPlatform.Hide() # Show the platform. DisappearingPlatform.Show()Bu kodu çalıştırdığında,
Hide()veShow()çağrıları birbirinin hemen ardından gerçekleştiği için platformun kaybolup yeniden belirdiği görülmez.Platformun görünür/görünmez durumda daha uzun kalması için,
Hide()veyaShow()çağrısı yaparkenSleep()kullanarak bir gecikme ekleyebilirsin.Sleep()fonksiyonu bir yordamın yürütülmesini askıya alır, burada fonksiyona birfloatbağımsız değişkeni ileterek yürütmenin askıya alınacağı süreyi (saniye olarak) belirtebilirsin. HerHide()veShow()çağrısından önceSleep()çağrısı yap ve daha önce tanımladığınDisappearDelaydeğerini geçir.Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= # Hide the platform. DisappearingPlatform.Hide() # Wait for DisappearDelay seconds. Sleep(DisappearDelay) # Show the platform.Bu kodu çalıştırırsan, oyunun geri kalanında
Platformgörünür hale gelmeden önce bir saniye (DisappearDelayile tanımlanan süre) boyunca görünmez olur.Sleep()fonksiyonu sadece bir asenkron bağlamda çağrılabilir.OnBegin()metodu,suspendsbelirleyicisine sahip olduğu için zaten bir asenkron bağlam olduğundan, başka bir şey yapmana gerek yoktur.Suspendsbelirleyicisi hakkında daha fazla bilgi edinmek için Belirleyiciler ve Öznitelikler sayfasına bakabilirsin.
Birden Fazla Platformu Gizleme ve Gösterme
Bir önceki adımdaki kodu kaybolmasını istediğin bölümdeki her platform için tekrarlayabilirsin ancak tüm cihaz referanslarını saklamak için bir dizi oluşturmak daha verimli olacaktır. Bu da dizideki her platformda yineleme yapmanı ve Verse cihazını birden fazla kez çoğaltmak zorunda kalmadan her birinde kod çalıştırmanı sağlayacaktır. Birden çok platformu gizlemek ve göstermek için aşağıdaki adımları izle:
Platform_seriessınıf tanımında,DisappearingPlatformalanınıDisappearingPlatformsadlı bircreative_propdizisi olarak değiştir. Platformları sırayla yinelemek için bu diziyi kullanacaksın. Değişkeni, boş bir dizi olanarray{}varsayılan değeriyle başlat.Verse# The in-level platforms that disappear and reappear in sequence. @editable DisappearingPlatforms:[]creative_prop = array{}Dizideki her bir öğeyi yinelemek için
forifadesini kullanabilirsin.Forifadesi sana bir dizin-değer eşleştirmesi vermek içinX ->Ydesenini kullanır. Dizin sol kısma (X), değer ise sağ kısma (Y) bağlıdır. BuradaXdeğeri platformun numarası/dizindir veYdeğeri diziden alınan her bir platformun referansıdır. Öncelikle, her bir öğeyi yinelemek için birforifadesi oluştur vePlatformNumberdeğişkenindeki her bir sayının dizinini al.~~~(verse) # Cihaz, çalışmakta olan bir oyunda başlatıldığında çalışır OnBegin<override>()<suspends>:void= for: PlatformNumber -> DisappearingPlatform:DisappearingPlatforms do: ~~~
Platformun numarasını yazdır ve platformu gizlemek için
Hide()fonksiyonunu çağır. ArdındanDisappearDelaysaniye boyuncaSleep()fonksiyonunu çağır.Verse# For each platform in DisappearingPlatforms, make it invisible and sleep. for: PlatformNumber -> DisappearingPlatform:DisappearingPlatforms do: # Hide the platform DisappearingPlatform.Hide() Print("Platform {PlatformNumber} is now hidden") Sleep(DisappearDelay)Karşı platformları göstermek için, birinciden sonra ikinci bir
forifadesi kullanırsın.DisappearingPlatformsiçindeki her platformu aynı şekilde yinele, ancak bu sefer platformu göstermek içinShow()veAppearDelaysaniye değeri için deSleep()fonksiyonunu çağır.~~~(verse) # DisappearingPlatforms'daki her platform için görünür hale getir ve uyut. for: PlatformNumber -> DisappearingPlatform:DisappearingPlatforms do: # Platformu göster. DisappearingPlatform.Show() Print("Platform {PlatformNumber} şimdi görünüyor") Sleep(AppearDelay) ~~~
Kod yazarken, yeniden kullanmak isteyebileceğin kodları ayrı fonksiyonlara yerleştirmek iyi bir fikirdir. Bu, kodu farklı bağlamlardan çağırmana ve aynı kodu tekrar tekrar yazmak zorunda kalmamana olanak sağlar. Deneyimine bağlı olarak, farklı durumlarda platformları gizlemek ve göstermek isteyebilirsin, bu nedenle bunların her birini işlemek için fonksiyonlar oluşturmalısın.
Platform_seriessınıf tanımınaHideAllPlatforms()veShowAllPlatforms()adında iki yeni fonksiyon ekle. Platformları gizlemeyi yönetenforifadesiniHideAllPlatforms()içine ve platformları göstermeyi yöneten ifadeyiShowAllPlatforms()içine taşı.Sleep()fonksiyonunu kullandığın için bu fonksiyonların asenkron olması gerekir. Bu nedenle her birine<suspends>değiştiricisini ekle. SonraOnBegin()içinde,HideAllPlatforms()ve ardındanShowAllPlatforms()fonksiyonlarını çağır.Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= HideAllPlatforms() ShowAllPlatforms() HideAllPlatforms()<suspends>:void= # For each platform in DisappearingPlatforms, make it invisible and sleep. for: PlatformNumber -> DisappearingPlatform:DisappearingPlatforms do:Şu anda, bu kod sadece bir kez çalışacaktır. Oyun devam ettiği sürece platformların kaybolmasını ve yeniden görünmesini sürdürmek için loop ifadesini kullanarak bu davranışı tekrarlayabilirsin. Bunu gerçekleştirmek için,
OnBegin()fonksiyonunaHideAllPlatforms()veShowAllPlatforms()çağrılarını içeren birloopifadesi ekle. Bu örnekte, platformların görünürlüğünü oyun devam ettiği sürece değiştirmek istiyorsun, bu nedenleloop’tan çıkmak için birbreakifadesi eklemene gerek yoktur.Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= loop: # Hide all platforms. HideAllPlatforms() # Show all platforms. ShowAllPlatforms()Bu kodu çalıştırırsan platformların hepsi önce sırayla kaybolur, sonra aynı sırayla yeniden görünür ve bu döngü oyun bitene kadar devam eder.
Kodunu kaydet ve derle. UEFN’deki Anahat Düzenleyicisi panelinde cihazın Ayrıntılar panelini açmak için platform_series cihazını seç.
DisappearingPlatforms’un altındaki Ayrıntılarpanelinde, bölümdeki her platform için bir dizi öğesi ekle. "Eleman Ekle" düğmesiyle diziye yeni elemanlar ekle, ardından obje seçiciye tıkla ve görünüm penceresindeki kreatif nesneyi seç. Bu dizinin sırasının, yineleme yapmak istediğin sırayla eşleştiğinden emin ol:
Bu kodu çalıştırırsan platformların hepsi önce sırayla kaybolur, sonra aynı sırayla yeniden görünür ve bu döngü oyun bitene kadar devam eder.
Kaybolan ve Yeniden Görünen Platformları Senkronize Etme
Oyuncuyu karelerin üzerinde zıplarken daha hızlı hareket etmeye zorlamak istersen sıranın sonraki bölümlerinde yer alan platformlar görünmeye devam ederken platformların kaybolmasını başlatabilirsin. Bu şekilde oyuncu, seri boyunca acele etmek zorunda kalacak, aksi takdirde düşecektir. Bu davranışı oluşturmak için her iki yordamın da (ShowAllPlatforms() ve HideAllPlatforms()) aynı zamanda çalışması ve ikincinin birinciden geride kalması gerekir. Böylece oyuncu, bir sonraki platform kaybolmadan önce platforma atlayabilmek için erken bir başlangıç yapabilir.
Platformların tümünün aynı anda gizlenmesi ve gösterilmesi için aşağıdaki adımları izle.
HideAllPlatforms()veShowAllPlatforms()’un eşzamanlı olarak çalışması için sync ifadesini kullanabilirsin.syncifadesi kod bloğunda iki veya daha fazla asenkron ifadeyi yürütür ve devam etmeden önce tüm ifadelerin tamamlanmasını bekler.OnBegin()’dekiloopifadesinin içine,HideAllPlatforms()veShowAllPlatforms()fonksiyonlarına birsyncifadesi ekle.Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= loop: # Run both expressions concurrently using sync. sync: # Hide all platforms. HideAllPlatforms() # Show all platforms. ShowAllPlatforms()Bu kodu olduğu gibi çalıştırırsan, bir platform eşzamanlı olarak gizlenir ve gösterilir. Bu istenen sonuç değildir, bu nedenle platformun kaybolmasını biraz geciktirmen gerekecektir. Oyuncuya başlangıç avantajı vermek için,
HeadStartdeğerini geçerekSleep()fonksiyonunu kullanmak isteyeceksin.syncifadesi kod bloğundaki tüm ifadeleri aynı anda yürüttüğünden,Sleep()veHideAllPlatforms()fonksiyonlarını iç içe yerleştirmek içinblockifadesini kullanman gerekir.Sleep()veHideAllPlatforms()ifadelerini kapsayanblockifadesini ekle. Şimdi senkronizasyon iki ifadeyi çalıştıracaktır. İlkiShowAllPlatforms()’u, ikincisiSleep()’i ve sonrasında daHideAllPlatforms()fonksiyonunu çağırır.Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= loop: # Run both expressions concurrently using sync. sync: block: Sleep(HeadStart) # Hide all platforms. HideAllPlatforms() # Show all platforms.Kodu kaydet ve Verse’e tıklayıp ardından kodu derlemek için Verse Kodu Oluştur’a tıkla.
Bölümün oynanış testini yapmak için UEFN araç çubuğunda Oturumu Başlat düğmesine tıkla.
Şimdi bölüme oynanış testi uyguladığında platformlar sırayla kaybolmaya başlar, sıranın sonraki bölümlerinde yer alan platformlar ise yeniden görünür ve oyun devam ettiği sürece bu desen devam eder.
Tam Kod
Aşağıdaki kod, sırayla görünen ve kaybolan bir platform serisi oluşturmaya yarayan tam koddur.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# See https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse for how to create a verse device.
# A Verse-authored creative device that can be placed in a level
platform_series := class(creative_device):
# How long to wait in seconds after platforms start appearing
Kendi Kendine Yapabileceklerin
Bu eğitimi tamamlayarak, bir dizi platformun görünürlüğünü oyun devam ettiği sürece değiştiren bir cihazı Verse kullanarak nasıl oluşturacağını öğrendin.
Öğrendiklerini kullanarak aşağıdaki işlemleri yapmaya çalış:
Platformların görünme ve kaybolma sırasını değiştir.
Fonksiyonları, Nesne Yürütücü Cihaz gibi diğer cihaz türlerinde düzenli aralıklarla çağırmak için aynı kavramları uygula.