Üzerine çıktığında kaybolan platformlar, engelli parkurlar gibi platformlu oyun modlarının başlıca unsurları arasındadır. Oyuncunun hızlı hareket etmesini ve düşmemek için nereye gideceğini planlamasını gerektirir.
Bu eğitimi izleyerek, oyuncu dokunduğunda kaybolup rastgele sayıda saniye sonra tekrar beliren bir platformu Fortnite İçin Unreal Editor’da (UEFN) Verse kullanarak nasıl oluşturacağını öğreneceksin. Bu örnekte, oyuncunun düşmemek için platformdan platforma atlaması gereken bir alanın nasıl oluşturulacağı gösteriliyor. Tam kod, referans olması için bu kılavuzun sonuna eklenmiştir.
Kullanılan Verse Dili Özelliği
spawn:
spawnifadesi, platformu rastgele bir sayıda saniye sonra yeniden görünür hale getiren asenkron fonksiyonu çağırmak için kullanılır.
Kullanılan Verse API’leri
Sleep():Sleep()API’siUygulama Programı Arabirimi), platformun kaybolmasıyla rastgele bir süre sonra tekrar belirmesi arasındaki gecikmeleri eklemek için kullanılır.GetRandomFloat():GetRandomFloat()API’si, platformun tekrar belirmesi öncesinde bir rastgele süre hesaplamak için kullanılır.Düzenlenebilir Özellikler: Platformun kaybolma ve yeniden belirme gecikmelerini kontrol edecek üç değişken ve platform referansının kendisi olmak üzere dört özellik UEFN’de kullanıma açılır.
Cihaz Olayları: Bir oyuncunun platforma ne zaman çıktığını öğrenmek için Tetikleyici cihazın
TriggeredEventfonksiyonunu kullanırsın.
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.
4 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.4 adet Tetikleyici cihazı: Bir oyuncunun her platforma ne zaman çıktığını öğrenmek için bu tetikleyicileri kullanırsın.
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 RecyclePlatform olarak adlandır.
Sahnene bir Tetikleyici cihazı ekle ve bunu RecyclePlatform’un alt öğesi olarak ayarla. Bunu platformun en üstüne yerleştir ve platformun tamamına sığacak şekilde yeniden boyutlandır. Anahat Düzenleyicisi’nde, Oyunda Görünür ayarını False olarak ve Kaç Kez Tetiklenebilir ayarını 1 olarak ayarla.
Oyuncu Doğma Karesi cihazını platformun üzerine yerleştir. Oyun başladığında oyuncu burada doğacak. Anahat Düzenleyicisi’nde Oyunda Görünür seçeneğini devre dışı bırak; böylece oyuncu, doğduktan sonra doğma karesinde duramaz. Tamamlanmış ayarlar şu şekilde görünmelidir:
Cihazı Oluşturma
Bu örnekte, oyuncu üzerine çıktığında platformun kaybolmasını ve rastgele sayıda saniye sonra yeniden belirmesini sağlayan davranışı tanımlamak için bir Verse ile yazılmış cihaz kullanılıyor. Verse kullanarak bu cihazı oluşturmak için aşağıdaki adımları izle.
Verse Gezgini’ni kullanarak disappear_on_touch_platform 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.
disappear_on_touch_platform cihazını İçerik Tarayıcısı’ndan bölümüne sürükle.
UEFN’de Cihaz Özelliklerini Düzenleme
Bu bölümde, editörde özelleştirebilmek için dört cihaz özelliğini UEFN'e nasıl açacağın gösteriliyor:
Bölüme yerleştirdiğin kreatif objeye yönelik bir cihaz referansı.
Oyuncu platforma dokunduğunda platformu gizlemeden önce ne kadar beklenmesi gerektiğini depolayacak
DisappearDelayadlı bir kayan sayı sabit.Platformu yeniden görünür hale getirmeden önce beklenecek minimum ve maksimum süreyi depolayacak
DelayMinveDelayMaxadlı ikifloat(kayan sayı) sabit. Bu iki değer, rastgele bir sayı alınırken izin verilen aralığı tanımlar.
Önceki kısımda oluşturduğun disappear_on_touch_platform cihazının bu özelliklerini kullanıma açmak için aşağıdaki adımları izle.
Verse Gezgini’ni aç ve disappear_on_touch_platform.verse dosyasına çift tıklayarak kodu Visual Studio Code ile aç.
disappear_on_touch_platformsınıf tanımına aşağıdaki alanları ekle:DisappearDelayadlı bir düzenlenebilirkayan değer. Bu, oyuncu platforma dokunduktan sonra platformu gizlemeden önce ne kadar süre bekleneceğini belirtir. Bu değeri1.0yani bir saniye olarak başlat.Verse# How long to wait after the player touches the platform before hiding it. @editable DisappearDelay:float = 1.0DelayMinadlı düzenlenebilir birfloat. Bu, platformu yeniden görünür hale getirmeden önce beklenecek minimum süreyi belirtir. Bunu3.0yani üç saniye olarak başlat.Verse# The minimum amount of time to wait before making the platform reappear. @editable DelayMin:float = 3.0DelayMaxadlı düzenlenebilir birfloat. Bu, platformu yeniden görünür hale getirmeden önce beklenecek maksimum süreyi belirtir. Bunu4.0yani dört saniye olarak başlat.Verse# The maximum amount of time to wait before making the platform reappear. @editable DelayMax:float = 4.0DisappearingPlatformadlı bir düzenlenebilircreative_prop. Bu, periyodik olarak 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# Reference to the platform in the level. @editable DisappearingPlatform:creative_prop = creative_prop{}PlatformTriggeradlı düzenlenebilir birtrigger_device. Bir oyuncunun platforma ne zaman çıktığını öğrenmek için bu cihazdanTriggeredEventolayına ihtiyacın olacak.Verse# The zone a player enters when landing on the platform. @editable PlatformTrigger:trigger_device = trigger_device{}
disappear_on_touch_platformsınıf alanların şöyle görünmelidir:Verse# A Verse-authored creative device that can be placed in a level disappear_on_touch_platform := class(creative_device): # How long to wait after the player touches the platform before hiding it. @editable DisappearDelay:float = 1.0 # The minimum amount of time to wait before making the platform reappear. @editable DelayMin:float = 3.0Kodlarındaki
ToggleDelaygibi değerleri editörde kullanıma açmak 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.
Bölümdeki disappear_on_touch_platform cihazını güncellemek için UEFN araç çubuğunda 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 disappear_on_touch_platform cihazını seç.
Dokununca Kaybolan Platform’un altındaki Ayrıntılar panelinde, obje seçiciye tıklayarak ve görünüm penceresindeki platform cihazını seçerek Platform’u RecyclePlatform (bölüme eklediğin kreatif nesne) olarak ayarla.
Artık Verse cihazın tarafından referans verilen bir nesneye sahip olduğuna göre, her iki cihazı da seç ve oyuncunun birinden diğerine atlayabileceği bir dizi platform oluşturmak için bunları bölüm içinde birden fazla kez çoğalt. Oluşturduğun her yeni Verse cihazı kendi platformuna referans vermelidir.
Platformu Gizleme ve Gösterme
Artık bölümü ve cihazları ayarladığına göre, bir oyuncu platforma indiğinde platformu gösterme ve gizleme işlevini ekleyebilirsin. Bu davranışı disappear_on_touch_platform sınıfı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= # Make the platform invisible. DisappearingPlatform.Hide() # Make the platform visible. 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) # Cihaz, çalışmakta olan bir oyunda başlatıldığında çalışır OnBegin<override>()<suspends>:void=
# DisappearDelay saniyelerini bekle. Sleep(DisappearDelay)
# Platformu görünmez yap. DisappearingPlatform.Hide()
# DisappearDelay saniyelerini bekle. Sleep(DisappearDelay)
# Platformu görünür yap. DisappearingPlatform.Show() ~~~
Bu kodu çalıştırırsan oyunun geri kalanında platform gö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.Platformun tekrar belirme süresini değiştirmek, oyunu daha ilginç hale getirebilir. Her seferinde
Sleep()fonksiyonuna aynı değeri vermek yerine,GetRandomFloat()fonksiyonuyla rastgele bir saniye sayısı elde edebilir ve bu değeriSleep()fonksiyonuna iletebilirsin.Dosyanın en üstüne
using { /Verse.org/Random }ekleyerekGetRandomFloat()fonksiyonunu kullan.Verseusing { /Fortnite.com/Devices } using { /Verse.org/Random } 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 disappear_on_touch_platform := class(creative_device):Platformun tekrar belirmesi için bekleme süresini belirlerken
GetRandomFloat()fonksiyonunuSleep()için bir bağımsız değişken olarak kullan ve izin verilen saniye aralığınıDelayMinveDelayMaxile ayarla.Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= # Wait for DisappearDelay seconds. Sleep(DisappearDelay) # Make the platform invisible. DisappearingPlatform.Hide() # Wait between DelayMin and DelayMax seconds.
Artık platform kaybolmadan önce
1.0saniye bekleyecek ve ardından3.0ile4.0saniye arasında yeniden görünecektir.
Oyuncunun Platforma Çıktığını Algılama
Oyuncunun platforma ne zaman çıktığını algılamak için trigger_device sınıfının kullanıma açtığı TriggeredEvent olayına bağlanabilirsin. Tetikleyici, sadece bir oyuncu üzerinden geçtiğinde TriggeredEvent gönderir. Kaç Kez Tetiklenebilir ayarını bir olarak ayarladığından, tetikleyicinin durumunu sıfırlamak ve tekrar TriggeredEvent göndermesine izin vermek için tetikleyicide Reset() çağrısı yapman gerekir.
Oyuncu platforma dokunduğunda bunu algılamak için aşağıdaki adımları izle ve platformun gizlenip yeniden belirme yanıtını vermesi için önceki bölümde yazdığın kodu kullan.
TriggeredEvent, parametre olarak isteğe bağlıplayerve dönüş türü olarakvoidiçeren bir fonksiyon imzası gerektirir. Tetikleyici cihazları kod aracılığıyla da etkinleştirebildiğin için bu fonksiyonda aracı isteğe bağlıdır, bu nedenle onu etkinleştirenin bir oyuncu olup olmadığını kontrol etmen gerekir.disappear_on_touch_platformsınıfınaOnPlayerTouch()adlı yeni bir metot ekle.VerseOnPlayerTouch(ActivatingPlayer:?agent):void=OnPlayerTouch()metodunda, birififadesi içinde, oyuncuyuActivatingPlayerseçeneğinden almaya çalış. Bu çağrı başarılı olursa, tetikleyiciyi kod yerine bir oyuncunun etkinleştirdiğini bilebilirsin.VerseOnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("A player touched a platform!")OnBegin()fonksiyonunda, olay işleyicisi olarakOnPlayerTouchöğesini kullanarakPlatformTrigger.TriggeredEvent’e bağlan. Artık bir oyuncu bir platforma her çıktığında,TriggeredEventetkinleştirilir veOnPlayerTouch()çalışır.VerseOnBegin<override>()<suspends>:void= # Subscribe to the PlatformTrigger's TriggeredEvent to know # when a player lands on the platform. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch)Platform gizlendiğinde, platformun içinden geçmeleri gerektiği için oyuncular tetikleyiciyi etkinleştirememelidir. Bunu yapmak için,
OnBegin()içinde,Hide()veShow()fonksiyonlarından sonra sırasıylaPlatformTrigger.Disable()veEnable()fonksiyonlarına çağrılar eklemelisin. Artık platformun gizliyken tetikleyicin etkileşime açık olmayacaktır.VerseOnBegin<override>()<suspends>:void= # Subscribe to the PlatformTrigger's TriggeredEvent to know # when a player lands on the platform. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch) # Wait for DisappearDelay seconds. Sleep(DisappearDelay) # Hide the platform and disable the trigger.
Bir oyuncu üzerine çıktığında platformu gizlemen gerekse de, platformu gizleme ve göstermeyi sağlayan kodu doğrudan OnPlayerTouch() yöntemine ekleyemezsin. Sleep() fonksiyonu sadece asenkron bağlamda çağrılabilir ve TriggeredEvent olay işleyicisi olarak asenkron fonksiyonlara izin vermediği için OnPlayerTouch() fonksiyonuna suspends belirleyicisini ekleyemezsin. Bunun yerine, OnPlayerTouch() fonksiyonundan asenkron bir fonksiyonu çağırmak için spawn ifadesini kullanabilirsin. Asenkron fonksiyonunu eklemek için aşağıdaki adımları izle.
disappear_on_touch_platformsınıf tanımına yeni birRecyclePlatform()metodu ekle. Bu kodun asenkron olarak çalışmasına izin vermek için<suspends>değiştiricisini ekle, platformu ve tetikleyiciyi gizlemeyi ve göstermeyi sağlayan koduOnBeginkod blokundanRecyclePlatform()kod blokuna taşı.Verse# Hide the platform and reset the PlatformTrigger. Then wait a random amount of time and reactivate show the platform. RecyclePlatform()<suspends> : void = # Wait for DisappearDelay seconds. Sleep(DisappearDelay) # Hide the platform and disable the trigger. DisappearingPlatform.Hide() PlatformTrigger.Disable()OnPlayerTouch()içinde, kodu asenkron olarak çalıştırmak içinRecyclePlatform()üzerindespawn{}çağrısı yap. TamamlanmışRecyclePlatform()fonksiyonun şu şekilde görünmeli:Verse# Runs when a player lands on the platform. Calls RecyclePlatform() to hide the platform # and reset trigger state. OnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("A player touched a platform!") spawn{RecyclePlatform()}Bu kodu çalıştırdığında platform kaybolur ve ardından oyuncu platforma ilk çıktığında yeniden görünür.
Asenkron, bir kod parçasının tamamlanmasının bir miktar zaman alabileceğini ifade eder. Burada, örneğin, platformun geri dönüşmesi tüm
Sleep()çağrıları nedeniyle birkaç saniye alır. Asenkron işlevler, asenkron işlevi çağıran kodun yürütülmesini engellemeden işlemleri gerçekleştirmene olanak sağlar. Asenkron bağlamlar vespawnifadesi hakkında daha fazla bilgi edinmek için Eşzamanlılık sayfasına bakabilirsin.Şu anda,
TriggeredEventyalnızca oyuncu platforma ilk kez çıktığında gönderilir. Olayı tekrar tetiklenebilir hale getirmek için tetikleyiciyi sıfırla fonksiyonunu çağırabilirsin.RecyclePlatform()içinde,Enable()fonksiyonunu çağırdıktan sonraPlatformTriggerüzerindeReset()fonksiyonunu çağır.Verse# Hide the platform and reset the PlatformTrigger. Then wait a random amount of time and reactivate show the platform. RecyclePlatform()<suspends> : void = # Wait for DisappearDelay seconds. Sleep(DisappearDelay) # Hide the platform and disable the trigger. DisappearingPlatform.Hide() PlatformTrigger.Disable()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ümünün oynanış testini yaptığında, her platforma çıktığında platform kaybolmalı ve rastgele birkaç saniye sonra tekrar görünmelidir.
Tam Kod
Aşağıda, bir platformun oyuncu platforma çıktığında kaybolmasını ve rastgele birkaç saniye sonra yeniden ortaya çıkmasını sağlayacak tam kod verilmektedir.
using { /Fortnite.com/Devices }
using { /Verse.org/Random }
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
disappear_on_touch_platform := class(creative_device):
# How long to wait after the player touches the platform before hiding it.
Kendi Kendine Yapabileceklerin
Bu eğitimi tamamlayarak, bir platformun oyuncu üzerine çıktığında kaybolup rastgele sayıda saniye sonra tekrar belirmesini sağlayan bir cihazı Verse kullanarak nasıl yapacağını öğrenmiş oldun.
Öğrendiklerini kullanarak aşağıdaki işlemleri yapmaya çalış:
İlgi çekici bir zorluk yaratmak için platformların boyutunu ve konumunu değiştirerek denemeler yap.
Bu örnekte oyuncu herhangi bir puan kazanmıyor ve düştüğünde hiçbir şey olmuyor. Burada nasıl bir puanlama sistemi ve kaybetme koşulu uygulayabilirdin?