Verse Parkur Şablonu oyuncuların pil toplamak için engeller ve platformlar arasında stratejik bir şekilde manevra yapabildiği bir oyun modunu nasıl oluşturacağını gösterir.
Bu oyun modunda oyuncular bölümü tamamlamak için dört pil toplar. Gizli pili bulmaları durumunda süre uzar. Süre dolduğunda oyuncu başa döner.
Bu şablon aşağıdakiler gibi bazı basit dil özelliklerini gösterir:
-
For Döngüleri
-
Abonelikler
-
Diziler
-
Cihaz API'si
Eşzamanlılık gibi karmaşık kavramlar bu şablonda kullanılmaz.
Genel Bakış
Bu adayı yeniden yapman için gereken adımları ideal sırasıyla kısa bir özet halinde aşağıda bulabilirsin:
-
Yeni bir proje oluştur ve oyunu kurmak için Ada Ayarlarını değiştir.
-
Arenayı inşa et.
-
Cihazları ayarla.
-
Verse Kodunu ekle.
Yeni Bir Proje Oluşturma ve Oyunu Kurma
-
UEFN’i aç ve yeni bir boş proje oluştur.
-
Anahat düzenleyicisinde ada ayarları cihazını seç ve kullanıcı seçenekleri - oyun kuralları bölümünü bul.
-
Kullanıcı Seçeneklerini aşağıda gösterildiği gibi değiştir.
Seçenek Değer Açıklama Oyun Kazanma Koşulu En Yüksek Puan Kazanır En yüksek puana sahip oyuncu oyunu kazanır. Kazmanın Verdiği Hasar Yok Kazma çevreye hasar vermez. Kazmayla Başla False Oyuncular oyuna bir kazmayla başlamaz. Eşyaları Otomatik Topla Evet Oyuncular temas ettikleri eşyaları otomatik olarak toplar. Tırmanmaya/Depara/Kaymaya/Omuz Atmaya İzin Ver Doğru Oyuncular çevrelerinde parkur yapabilir. Raunt Kazanma Koşulu Puan En yüksek puana sahip oyuncular raundu kazanır. Birinci Puan Tablosu Sütunu Puan Puan tablosunun birinci sütununda puan gösterilir.
Arenayı İnşa Etme
Bu harita, Fortnite > Galeriler > Nesneler altında bulunabilecek Siber Şehir Nesne Galerisi'ni kullanır.
Bu haritayı oyuncuların üzerinde parkur yapacağı platformlar ve engellerle birlikte yeniden oluştur.
Cihazları Ayarlama
Bu eğitimde şu cihazlar kullanılır:
-
5 adet Eşya Verici
-
1 adet Oyunu Sonlandırma
-
1 adet Hasar Bölgesi
-
1 adet Süreölçer
-
1 adet Gösterge Paneli Mesajı
-
1 adet Verse Cihazı
Oyuncu Doğma Karesi Cihazı

Oyuncuları haritaya çıkarmak için bir Oyuncu Doğma Karesi cihazı kullan. Haritanın başlangıcında her oyuncu için Fortnite > Cihazlar > Oyuncu Doğma Karesi altında bulabileceğin bir doğma karesi yerleştir.
Bu cihazı ayarlamak için Kullanıcı Seçeneklerini aşağıdaki gibi yapılandır:
Seçenek | Değer | Açıklama |
---|---|---|
Oyunda Görünür | False | Bu cihaz oyunda görünmeyecektir. |
Eşya Verici Cihazı

UEFN'de bir tek kullanımlık eşyayı içerik çekmecesinden sürüklemek onu otomatik olarak bir eşya çıkma yeri cihazına yerleştirir. Haritaya bir pil sürükle Bunu Fortnite > Eşyalar > Pil bölümünde bulabilirsin.
Bu cihazı ayarlamak için Kullanıcı Seçeneklerini aşağıdaki gibi yapılandır:
Seçenek | Değer | Açıklama |
---|---|---|
Çıkmadan Önce Geçen Süre | 0,1 | Bu, eşya çıkmadan önce geçen süreyi belirler. |
Süreyle Eşyayı Yeniden Çıkar | False | Pil alındıktan sonra yeniden çıkmaz. |
Taban Oyun Sırasında Görünür | False | Cihaz oyunda görünmez. |
Silahlara Bonus Cephane | False | Silahlar bonus cephane vermez. |
Üstünden Geçerken Al | True | Oyuncular bu eşyayı otomatik olarak alır. |
Eşya Ölçeği | 2,0 | Pilin boyutunu belirler. |
Bu cihazı dört kez kopyalayıp yapıştır ve haritanda çevreye yerleştir.
Oyunu Sonlandırma Cihazı

Etkinleştirildiğinde oyunu sonlandırmak için bir Oyunu Sonlandırma cihazı yerleştir.
Bu cihazı ayarlamak için Kullanıcı Seçeneklerini aşağıdaki gibi yapılandır:
Seçenek | Değer | Açıklama |
---|---|---|
Özel Zafer Duyurusu | metin gir | Kazanan oyuncu için gösterilmesini istediğin metni gir. |
Hasar Bölgesi Cihazı

Hasar Bölgesi cihazı, alanındaki oyunculara hasar verebilen bir sınırdır. Bu cihazı haritanın altına yerleştir ve Alan Genişliği, Derinlik ve Yükseklik değerlerini, düşen oyuncuların hemen avlanması için alanının altını kaplayacak şekilde ayarla.
Bu cihazı ayarlamak için Kullanıcı Seçeneklerini aşağıdaki gibi yapılandır:
Seçenek | Değer | Açıklama |
---|---|---|
Hasar | 500 | Bu cihaz düşen oyuncuları anında avlamak için yeterince hasar verir. |
Süreölçer Cihazı

Oyunu Sonlandırma cihazının yanına bir Süreölçer cihazı yerleştir. Bu cihaz, oyuncu avlanana kadar geri sayım yapar ve baştan başlamalıdır.
Bu cihazı ayarlamak için Kullanıcı Seçeneklerini aşağıdaki gibi yapılandır:
Seçenek | Değer | Açıklama |
---|---|---|
Süre | 30 | Süreölçer 30 saniye sürer. |
Oyun Başlayınca Başlat | True | Süreölçer, oyun başladığında çalışır. |
Şuna Uygulanır: | Oyuncu | Süreölçer başladığında belirli bir oyuncuya uygulanır. |
Süreölçer Durunca Başarılı Olma | False | Süreölçer sona ulaştığında başarılı sayılmaz. |
Oyun Sırasında Görünür | Gizli | Cihaz oyunda gizlenir. |
Süreölçer Çalışma Metni | metin gir | Süreölçer için gösterilmesini istediğin metni gir. |
Gösterge Paneli (HUD) Mesajı

Oyunculara ilgi çekici mesajlar göstermek için bir Gösterge Paneli Mesajı cihazını kullan.
Bu cihazı ayarlamak için Kullanıcı Seçeneklerini aşağıdaki gibi yapılandır:
Seçenek | Değer | Açıklama |
---|---|---|
Görünme Süresi | 2,0 | Mesaj kaybolmadan önce iki saniye gösterilir. |
Raunt Başlangıcında Göster | False | Raunt başladığında bu mesaj gösterilmez, bir pil alındığında gösterilir. |
Verse Kodları Ekleme
@editable fonksiyonuyla cihazlara referans göstererek işe başlayarak aşağıdaki Verse kodlarını ekle.
Kodu yazıldığı sırayla kopyalayabilirsin. Açıklamalar netlik sağlamak için kod içine eklenir.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation}
using { /UnrealEngine.com/Temporary/Diagnostics }
log_parkour := class(log_channel){}
# Bu cihaz bir bölüme yerleştirilebilen, Verse ile oluşturulan bir kreatif cihazıdır
# Bu kod örneği, süreölçer bitmeden 4 pil toplamanın hedeflendiği bir Parkur yorumudur
#
## Başlarken:
# https://dev.epicgames.com/documentation/tr-tr/uefn/learn-programming-with-verse-in-unreal-editor-for-fortnite
parkour_race_script := class(creative_device):
Logger : log = log{Channel:=log_parkour}
# Oyuncu doğma karesi cihaz referansı
@editable
PlayerSpawnDevice : player_spawner_device = player_spawner_device{}
# Zafer için Oyunu Sonlandırma Cihazı
@editable
EndGameVictoryDevice : end_game_device = end_game_device{}
# Bu oyun modu için süreölçer
@editable
TimerDevice : timer_device = timer_device{}
# Oyuncu bir pil aldığında görüntülenecek gösterge paneli mesaj geri bildirimi
@editable
HUDMessageBattery : hud_message_device = hud_message_device{}
# Elimizdeki Eşya Çıkma Yerleri dizisi.
@editable
BatteryItemSpawners : []item_spawner_device = array{}
@editable
SecretBatteryItemSpawner : item_spawner_device = item_spawner_device{}
# Oyuncu gizli pili aldığında eklenecek ayarlanabilir süre miktarı
@editable
SecretBatteryTimeReward : float = 10.0
# Şimdiye kadar topladığımız pil sayısını temsil eden tamsayı bildirimi
var BatteriesCollected : int = 0
Yukarıdaki kod, Kreatif Cihazlarını, dizileri ve kayan sayıları UEFN'de kullanıma açmak için @editable öğesinin nasıl kullanılacağını gösterir. Kodunun bunları daha sonra çağırması için cihazların öncelikle Verse'te tanımlanması gerekir.
# Bir pil toplandığında gösterilecek mesajlar
BatteryCollectedMessage<localizes>(Amount:int) : message= “{Amount} pil topladın”
BatteriesCollectedMessage<localizes>(Amount:int) : message = “{Amount} pil topladın”
# Gizli pili toplama mesajları ve tamamlama mesajı
AllBatteriesCollectedMessage<localizes> : message = “Bütün pilleri topladın!”
SecretBatteryCollectedMessage<localizes> : message = “Gizli pili topladın, ekstra süre eklendi!”
Yukarıdaki kod, toplanan pil miktarına göre parametre haline getirilmiş mesaj döndüren bir fonksiyonun nasıl tanımlanacağını gösterir. Ayrıca tüm piller ve gizli pil toplandığında gösterilecek mesajları tanımlar.
# Bu device_script sürmekte olan bir oyunda başlatıldığında çalışır
OnBegin<override>()<suspends>:void=
# Kodunun ne için olduğunu belirlemek için günlüğe çıktı oluşturabilirsin
Logger.Print("Parkour Race Script Started!")
# AgentSpawnedEvent olayına bağlanma.
# Oyuncu doğduğunda "HandleAgentSpawned" fonksiyonu çağrılır.
PlayerSpawnDevice.SpawnedEvent.Subscribe(HandleAgentSpawned)
# Süreölçer ile aynı. Süresi dolduğunda abone oluruz
TimerDevice.FailureEvent.Subscribe(HandleTimerExpired)
# batteryItemSpawners dizimizin üzerinden geçeriz ve her Eşya Çıkma Yeri için ItemPickupEvent olayına bağlanırız.
# Bunu her Eşya Çıkma Yeri için yaparız ve yukarıda AgentSpawnedSubscription ve TimerExpiredSubscription için yaptığımız gibi işleyiciyi kaydetmeyiz.
# İşleyiciyi kaydetmen gerekmez ancak o olmadan bağı iptal edemezsin, bu yüzden her eşya alındığında başlatılır.
for (BatterySpawner : BatteryItemSpawners):
BatterySpawner.ItemPickedUpEvent.Subscribe(HandleBatteryPickedUp)
<# Diziden geçen bir tamsayı kullanan yukarıdaki for döngüsünü gerçekleştirmenin alternatif bir yolu
for (i:int := 0..BatteryItemSpawners.Length - 1):
if (Battery := BatteryItemSpawners[i]):
Battery.ItemPickedUpEvent.Subscribe(HandlebatteryPickedUp) #>
SecretBatteryItemSpawner.ItemPickedUpEvent.Subscribe(HandleSecretBatteryPickedUp)
OnBegin fonksiyonu, pillerin alınması durumunda for döngüsü ile oyun başladığında ne olacağını tanımlar.
# Oyuncu Doğma Karesinden Ajan Doğduğunda çağrılan bir fonksiyon
HandleAgentSpawned(Agent:agent):void=
Logger.Print("Agent Spawned!")
# Yeniden çıkan oyuncuların tam süreyi aldığından emin olmak için Süreölçer Cihazını sıfırla
TimerDevice.Reset(Agent)
TimerDevice.Start(Agent)
Yukarıdaki kod, oyuncunun doğmasıyla süreölçerin sıfırlanması ve baştan başlaması içindir.
# Eşya Çıkma Yerlerinden bir pil eşyası alındığında çağrılan fonksiyon
HandleBatteryPickedUp(Agent:agent):void=
# Toplanan pil sayısını artır
set BatteriesCollected = BatteriesCollected + 1
# Pil sayısını günlüğe bu şekilde çıkarabilirsin. Hata ayıklama için faydalıdır
Logger.Print("Alınan toplam pil sayısı: {BatteriesCollected}")
# Oyunu sonlandırmak için yeterli sayıda pilin toplanıp toplanmadığını kontrol et
if:
BatteriesCollected >= BatteryItemSpawners.Length
then:
# 4 (veya daha fazla) pil toplayıp toplamadığımızı kontrol et. Topladıysak kazandık demektir. EndGame fonksiyonunu çağır.
spawn { EndGame(Agent) }
else:
# Pil sayısı 4’ten az ise bu kod çalışır. Oyuncuyu teşvik etmek için bir gösterge paneli mesajı göster
# Yalnızca 1 pil toplandıysa gösterge paneli mesajı "pil" olur. 1'den fazla toplandıysa "piller" olur
if:
BatteriesCollected = 1
then:
HUDMessageBattery.SetText(BatteryCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
else:
HUDMessageBattery.SetText(BatteriesCollectedMessage(BatteriesCollected))
HUDMessageBattery.Show(Agent)
# Bu durumda oluşturduğumuz dizideki bir sonraki Eşya Çıkma Yerini alırız
# Bunu diziye "dizin oluşturarak" yaparız. NextBatterySpawner referansının doğru şekilde yapıldığından emin olmak için dizin, "if" ifadesinin içinde olmalıdır
if:
NextBatterySpawner := BatteryItemSpawners[BatteriesCollected]
then:
# Bir sonraki eşya çıkma yerini aldıysak, alınacak bir sonraki pili etkinleştirecek SpawnItem fonksiyonunu çağır
NextBatterySpawner.SpawnItem()
Yukarıdaki kod, pilin alınmasını işler. Pillerin tümü toplandıysa EndGame yöntemi çağrılır. Toplanmadıysa oyuncular için gösterge paneli mesajları gösterilir ve bir sonraki pil çıkarılır.
HandleSecretBatteryPickedUp(Agent:agent):void=
Logger.Print("Picked up secret battery")
# Ek süre ilave edebilmemiz için kalan süreyi al
var TimeRemaining:float = TimerDevice.GetActiveDuration( Agent )
var TimeToAdd:float = (TimeRemaining + SecretBatteryTimeReward)
# Süreölçer Cihazına ilave süre ekle ancak başlangıçtaki başlatma süresini aşma
TimerDevice.SetActiveDuration(Min(TimeToAdd, TimerDevice.GetMaxDuration()), Agent )
HUDMessageBattery.SetText(SecretBatteryCollectedMessage)
HUDMessageBattery.Show(Agent)
Yukarıdaki kod, gizli pil alındığında Süreölçer cihazına süre ekler. Eklenen süre, Süreölçer cihazının 30 saniyelik başlatma süresini aşmayacak şekilde ayarlanır. Bu kod ayrıca bir ekran mesajı gösterir.
# Süreölçer dolduğunda çağrılan fonksiyon
HandleTimerExpired(MaybeAgent:?agent):void=
Logger.Print("Timer Ended")
if (Agent := MaybeAgent?):
Agent
# Oyuncuyu avla
if:
FortCharacter:fort_character = Agent.GetFortCharacter[]
then:
FortCharacter.Damage(500.0)
Yukarıdaki kod, süre dolduğunda oyuncuyu avlar. Oyuncu daha sonra yeniden doğar ve süreölçer HandleAgentSpawned yönteminde sıfırlanır.
# Oyunun sonunu işleyen asenkron bir fonksiyon
EndGame(Agent:agent)<suspends>:void=
HUDMessageBattery.SetText(AllBatteriesCollectedMessage)
HUDMessageBattery.Show(Agent)
# Oyunu sonlandırmadan önce üç saniye bekle
Sleep(3.0)
EndGameVictoryDevice.Activate(Agent)
# Bu device_script durdurulduğunda veya oyun bittiğinde çalışır
OnEnd<override>():void =
Logger.Print("Verse device stopped!")
Yukarıdaki kod oyunu sonlandırır. Sleep(3.0) kullanmak bir asenkron yöntem kullanmanın örneğidir.
Verse Cihazını Ayarlama

Verse kodunu derle, sonra cihazı İçerik Çekmecesinde bul. Ayarları özelleştirmek için Verse cihazını haritanın görülmeyen bir alanına sürükle.

Cihazın Ayrıntılar panelinde yukarıdaki fotoğrafta görüldüğü gibi başvurulan her bir cihazla eşleşecek ayarları yapılandır.
Bu cihazı ayarlamak için Kullanıcı Seçeneklerini aşağıdaki gibi yapılandır:
Seçenek | Değer | Açıklama |
---|---|---|
PlayerSpawnDevice | Oyuncu Doğma Karesi | Cihazlara başvurmak için açılır menü kutusundan bu seçeneği belirle. |
EndGameVictoryDevice | Oyunu Sonlandırma Zafer Cihazı | Cihazlara başvurmak için açılır menü kutusundan bu seçeneği belirle. |
TimerDevice | Süreölçer | Cihazlara başvurmak için açılır menü kutusundan bu seçeneği belirle. |
HUDMessageBattery | Gösterge Paneli Mesajı Cihazı Pil | Cihazlara başvurmak için açılır menü kutusundan bu seçeneği belirle. |
PlayerSpawnDevice | Oyuncu Doğma Karesi | Cihazlara başvurmak için açılır menü kutusundan bu seçeneği belirle. |
BatteryItemSpawners - 0 | Pil Çıkma Yeri 1 | Cihazlara başvurmak için açılır menü kutusundan bu seçeneği belirle. |
BatteryItemSpawners - 1 | Pil Çıkma Yeri 2 | Cihazlara başvurmak için açılır menü kutusundan bu seçeneği belirle. |
BatteryItemSpawners - 2 | Pil Çıkma Yeri 3 | Cihazlara başvurmak için açılır menü kutusundan bu seçeneği belirle. |
BatteryItemSpawners - 3 | Pil Çıkma Yeri 4 | Cihazlara başvurmak için açılır menü kutusundan bu seçeneği belirle. |
SecretBatteryItemSpawner | Pil Çıkma Yeri - Gizli | Cihazlara başvurmak için açılır menü kutusundan bu seçeneği belirle. |
SecretBatteryTimeReward | 10,0 | Gizli pili toplamak için süre ödülü. |
Tamamlanan bölümünü test etmek için Oturumu Başlat'ı seç.