Verse Sürekliliğiyle Pist Yarışı şablonu, Bir Pist Yarışı Tasarlamak adlı Kreatif şablonunun UEFN'e dönüştürülmüş halidir ve projeye aşağıdaki işlevler eklenmiştir:
Verse Sürekliliği kullanan ve yalnızca ilk rauntta gösterilen, oyun öncesi lobisinde kalıcı bir yerel sıralama.
Oyuncuları başlangıç çizgisindeki arabalara Verse Sürekliliğini kullanarak bir önceki raunttaki bitiş sıralarına göre atayan bir sistem.
Bir sinematik ve Verse kullanarak her oyuncunun istatistiklerini görüntüleyen bir başlangıç dizilimi.
Ve daha fazlasına erişebilirsin!
Bir Pist Yarışı Tasarlamak adlı Kreatif şablonun amacı, yarış pisti öğelerini kullanarak bazı oynanış kalitesi özellikleriyle benzersiz bir yarış modu oluşturmaktı. Bu UEFN şablonundaysa, UEFN’in güçlü becerilerinden yararlanmak amacıyla haritadaki birçok özelliğin değiştirilmesi ve yükseltilmesi için bütünsel bir yaklaşım benimsendi.
Aşağıdaki bölümlerde bu güncellemeler daha ayrıntılı olarak inceleniyor.
Eğitim Alanını Yükseltme
Eğitim Bölgesinde sıralamaya yer verildi. Haritadaki ilk raunda her katılışında, mevcut sıralamaya bakmak ve eğitim bölgesini keşfetmek için 30 saniyen olacak.
Bu bölge, yarış heyecanını tatmak isteyen oyuncular için görsel olarak ilgi çekici olacak şekilde tasarlandı; aynı zamanda tam da bunun gibi bir haritanın nasıl oluşturulacağı hakkında zengin ayrıntılar sunuyor. Eğitim bölgesi, daha temiz ve havadar bir his vermesi için Kreatif şablonundan yeniden tasarlandı ve biraz doğal Lumen ışığı katabilmek için gökyüzü ışıkları eklendi.
Şablonu UEFN’e yüklediğinde, her cihaz grubunun ve Verse kodunun ayarları hakkında bilgi edinebilir, şablonun nasıl oluşturulduğunu öğrenebilir ve bunları kendi deneyimlerine uygulayabilirsin.
Eğitim Bölgesi, cihazlarımızın çoğunun bulunduğu, dolayısıyla bunlara göz atabileceğin ve mantıklarını anlayabileceğin yerdir. Çekirdek tutma cihazları, Övgü ve Analiz de bunlar arasında yer alır. Övgü cihazları yalnızca bir turu veya yarışı tamamladığında TP verir.
Analiz cihazlarını, projeni gelecekteki güncellemelerde iyileştirmene yardımcı olacak çeşitli veri noktalarını izlemek için ayarlayabilirsin. Bu şablonda, her kontrol noktasının ne sıklıkla tamamlandığı ve yarış sırasında insanların ne sıklıkla gümüş para topladığı takip ediliyor. Bunların ikisi de belirli bir kontrol noktasına veya paraya ulaşmanın ne kadar kolay veya zor olduğuna ilişkin veri sağlar. Bu verilere dayalı olarak, gelecekteki sürümlerde bu objelerin konumunu veya sayısını ayarlayarak tüm oyunun daha sorunsuz bir şekilde aktığı daha iyi bir yarış deneyimi sağlayabilirsin.
Anahat Düzenleyicisini Temizleme
Proje UEFN’e dönüştürüldükten sonra Anahat Düzenleyicisi uzun bir düzenlenmemiş öğeler listesiyle doldu.
Her şey çalışmaya devam ettiği halde araçlar, bariyerler ve diğer öğelerin adlarına numaralar eklenmişti; bu da proje yapısının anlaşılmasını zorlaştırıyordu. Bu numaralar dönüştürme işlemi sırasında, her öğenin ve cihazın benzersiz bir ada sahip olmasını sağlamak için otomatik olarak eklendi.
Bu durumu yönetmek için projeye, tüm objeleri konumlarına ve işlevlerine göre düzenleyen bir dosya sistemi eklendi. Düzenlemek zaman alsa da bu sistem sayesinde obje gruplarını veya tüm alanları Kreatif’e göre çok daha verimli bir şekilde taşıyabilir veya silebilirsin.
Kalıcı Yerel Sıralama
Orijinal Kreatif haritada kalıcı verilerin eksikliği nedeniyle, önceki yarışların kazananları ve oyuncu istatistikleri izlenemiyordu. Güncellenen UEFN şablonu haritasında Verse ve Verse Sürekliliği kullanılması, oyuncu verilerini oyun oturumları genelinde depolayabileceğimiz, oyuncunun yaşam boyu istatistiklerini izleyebileceğimiz ve yerel sıralamalar oluşturabileceğimiz anlamına geliyor. Sadece geçerli oturumdaki oyuncuların verilerine erişebilirsin, bu nedenle sıralama sadece şu anda oyunda olan oyuncuların istatistiklerini yansıtır.
Her oyuncu için takip edilecek en önemli kalıcı istatistiklerin “podyumlar” ve “tur süresi” olduğuna karar verdik. Oyuncular ancak ilk 3’te yer aldıklarında podyuma çıkarken en iyi tur süresi istatistiği en hızlı yarışçıları takip eder. Ayrıca “puan” adlı ekstra bir istatistik ekledik. Oyunculara yarış sırasında yerleştikleri konumlarına göre puan verilir, bu nedenle çok sayıda yarışa katılan bir oyuncu, iyi bir sıraya ulaşamasa bile büyük miktarda puan kazanabilir. Bu istatistikleri kullanarak en amansız, en hızlı ve en azimli yarışçıları bir arada takdir etmenin bir yolunu bulduk.
Dönüştürülen şablon, her oyuncunun yaşam boyu istatistiklerini gösteren yerel sıralamaların yer aldığı bir oyun öncesi lobisi kullanır. Bu istatistikler, en iyi yaşam boyu puan istatistiğine sahip oyuncuların en önde gösterilmesi ve ilk üç oyuncunun yeteneğine işaret etmek için vurgulanması amacıyla sıralanmıştır. Bu istatistikler ayrıca başlangıç dizilişi sinematiği sırasında gösterge panelinde de gösterilerek oyuncuların rakiplerine yakından bakmaları ve yarış sırasında kime dikkat etmeleri gerektiğini bilmeleri sağlanıyor.
Kalıcı yerel sıralamalar oluşturma hakkında daha fazla bilgi almak için Kendi Oyun İçi Sıralamalarını Oluştur bölümüne göz at.
Başlangıç Çizgisinde Yarışçı Sırası
Dönüştürülen şablonda, yarışçıların başlangıç çizgisinde rastgele sıralandığı orijinal projeden farklı olarak, yarışçıların bir önceki rauntta ne kadar iyi performans gösterdiğine dayanan bir sıralama kullanılıyor. Bu, oyuncuları birinci olmasalar bile yarışı hızla bitirmeye teşvik ediyor.
İlk rauntta yarışçılar rastgele bir sıraya yerleştirilirken, ilk raundun ardından bir önceki raundu bitirdikleri konuma göre sıralanıyor. Bu bilginin rauntlar arasında saklanması gerekir ancak oyun bittikten sonra kalıcı değildir. Bu bilgiyi, başlangıç sırasını, oyuncuları daha önceki bitirme sıralarına göre sıralayarak belirlemek için kullanabilirsin. Raunt bilgilerinin nasıl depolanacağını ve verilerin nasıl sıralanacağını öğrenmek için aşağıdaki eğitimleri incele:
# Orders and returns players by their finish order in the previous round.
# During the first round, players are given random starting placements.
GetPlayerStartOrder<public>(Players:[]player):[]player=
var OrderedPlayers:[]player = Players
if:
IsFirstRound[GetRound[]]
then:
# Randomize player order because it's first round.
set OrderedPlayers = Shuffle(OrderedPlayers)
Oyuncuları araçlara atayıp başlangıç çizgisine yerleştirirken oyuncuların gerçekten aktif ve yarışacak kişiler olduğundan emin olmak istersin. Tüm oyuncuları tarayıp aktif durumdakileri (henüz oyundan ayrılmamış oyuncuları) ve seyirci olmayanları (gerçekten yarışacak olanları) döndüren GetAllValidPlayers() adında bir fonksiyon oluşturabilirsin.
# Get all players that are able to race.
GetAllValidPlayers(Players:[]player):[]player=
# Valid players are ones that are active and not spectating.
for:
Player : Players
Player.IsActive[]
not Player.IsSpectator[]
do:
PlayerTüm bunlarla birlikte proje, ilk rauntta sıralama lobisini kurmak için starting_game_sequence cihazını kullanır ve ardından yarışa başlamadan önce oyuncuları başlangıç konumlarına ve araçlara atar.
# This file handles the logic for the pregame lobby and the cinematics that play at the beginning of a race.
# It controls the length of the starting lineup based on the number of players, and plays an intro for each
# player by displaying their stats.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/FortPlayerUtilities }
using { /Verse.org/Native }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
Oyuncu İstatistikleriyle Başlangıç Çizgisi Sinematiği
Bir Pist Yarışı Tasarlamak Kreatif şablonunun orijinal versiyonu, yarışın hazır, dikkat, başla girişini düzenlemek için Dalga Tetikleyici cihazını kullanıyordu. Dalga Tetikleyici, metin görüntülemek ve başlangıç çizgisinde ışıkları etkinleştirmek için tetikleyicileri etkinleştirerek belirlenmiş bir süre boyunca bir olaylar sekansını oynatıyordu.
Büyük bir açılış sinematiği elde etmek için dönüştürülen şablonla Dalga Tetikleyici cihazı, UEFN’nin Sinematik Sekans cihazı ile değiştirildi. Sequencer’ı kullanarak farklı kameralar, Gösterge Paneli öğeleri ve aktif oyuncu sayısına göre ayarlanan dinamik bir diziliş görünümü ekleyebilirsin. Bölüm Sekansı cihazı, önceki versiyonda Dalga Tetikleyici cihazının kurulumuna benzer şekilde, önemli noktalarda cihazları etkinleştirerek bir sonraki oyuncunun puanının ne zaman görüntüleneceğini veya tanıtımın ne zaman kesileceğini belirlemene olanak sağlar.
Bir oyuncu girişi her başladığında Bölüm Sekansı özellikle StartPlayerIntroEvent adlı Tetikleyici cihazını, bir oyuncu girişi her bittiğinde EndPlayerIntroEvent adlı Tetikleyici cihazını etkinleştirir. Verse kodu bu bilgiyi kullanarak daha önce kaç tane oyuncu tanıtımının gösterildiğini belirler ve oyundaki oyuncu sayısıyla aynıysa sinematiğin oynatılmasını durdurur. Sinematik önce biterse, race ifadesinde olduğu için oyuncu tanıtımlarını beklemeyi de iptal edecektir.
Verse kodu her oyuncu için WaitForPlayerIntro()’yu çağırır. Bu fonksiyon, her oyuncu için bir döngü başlatır ve oyuncu istatistiklerinin gösterge panelinde ne zaman görüntüleneceğini bilmek için StartPlayerIntroEvent Trigger cihazının oyuncunun başlangıç konumu sırası kadar çok kez etkinleşmesini bekler. Bu WaitForPlayerIntro() döngülerinin her biri, birden fazla asenk fonksiyon ve dizi öğesi arasındasenkronize etmek için böl ve yönet eşzamanlılık algoritması kullanan ArraySync() fonksiyonu içinde çağrılır.
# A Verse-authored creative device that can be placed in a level
starting_game_sequence := class(creative_device):
# The cinematic that intros the players and their stats.
@editable
StartingLineupCinematic:cinematic_sequence_device = cinematic_sequence_device{}
# The cinematic that we cut to after the lineup and before the race starts.
@editable
RaceStartCinematic:cinematic_sequence_device = cinematic_sequence_device{}
Proje, widget’ları Widget Editörü’nde tasarlamak için bir Açılır Diyalog cihazı kullanır ve Verse kullanarak bilgileri değiştirir. Bunu Açılır Diyalog cihazında butonların üzerindeki metni ayarlayarak yapar.
# Updates the Popup UI to display the lifetime stats of the given player during the
# race starting sequence.
UpdatePopupUI<public>(Player:agent, PopupDialogUI:popup_dialog_device):void=
if:
CurrentPlayerStats := GetPlayerStats[Player]
then:
PopupDialogUI.SetButtonText(PlayerText(Player), 0)
PopupDialogUI.SetButtonText(PointsText(CurrentPlayerStats.Points), 1)
PopupDialogUI.SetButtonText(PodiumsText(CurrentPlayerStats.Podiums), 2)
BestLapText:message = if(IsValidBestLapTime[CurrentPlayerStats.BestLapTime]):
Bölüm Tasarımı
Bu güncellemede bir arazi parkuru oluşturmak için Manzara modunu kullandık. Daha az öğe kullanarak bellek tasarrufu sağladık ve artık parkuru çevreleyen dağlar daha fazla derinliğe sahip. Ayrıca yeni bir arazi türü oluşturmak için su etki aktörleri ve şelale kullandık ve dikkatleri yarış pistinin bir sonraki bölümüne çektik.
Orijinal projemizin eski gece/gündüz döngüsünden gelişmiş Fortnite Bölüm 4 aydınlatmasına geçtik. Bu yeni döngü, Lumen’i kullanarak daha yumuşak gölgeler ve gerçekçi bir global aydınlatma oluşturmamızı sağladı.
Orijinal yarış pisti şablonunda 120’den fazla bariyer olduğunu biliyor muydun? Oyuncuların pistte kalmasını sağlamak ve araçların saha dışına çıkmasını önlemek için bariyerler kullanılıyordu. Güncellemede, bariyerlerin yalnızca yarış başlamadan önce oyuncuları yerlerinde tutmak için kullanıldığını ve pistin tamamında kullanılmadığını fark edeceksin. Oyuncuların pistte kalmalarını sağlamak için yarış kontrol noktaları, toplanabilir öğeler ve bazı çevre parçaları kullanıldı:
Takviye paraları: Her serideki son paranın altına hız takviyesi karesi eklenerek, oyuncular en etkili yarış süresini elde etmek için pistte kalmaya teşvik ediliyor. Paralar her turda yeniden ortaya çıkar ve oyunculara ilk seferde kaçırdılarsa tekrar alma fırsatı verir.
Oyuncuların pistte kalmasını sağlayan görsel tasarım: Pist akışının amacını vurgulamak için pistin birçok yerinde kısa, beyaz bariyerler kullanıldı. Yol, yan yana birkaç arabaya yetecek genişlikte tasarlanmıştı. Oyuncunun aracının sıkışmadan rahatça hareket edebileceği ancak istenmeyen yollara girmesinin de engelleneceği şekilde ağaçlar, karavanlar ve diğer tasarım öğeleri gibi ek dekorasyonlar ve aksesuarlar yerleştirildi.
Kısayollar ve atlamalar: Orijinal harita basit bir 8 şeklinden oluşuyordu ancak oynanış testlerinde oyuncuların atlamaları kullanarak kestirmeden gitmeyi sevdiğini gördük. Yeni tasarımda, oyuncuların haritayı tamamlamak için istedikleri yolu seçebilmelerine izin vermek amacıyla birkaç kısayol ve atlama eklendi.
Son olarak, özellikle yerleştirilen yarış kontrol noktaları, yarışta ilerlemek için hepsi de gerekli olduğundan oyuncuların pisti takip etmesini zorunlu hale getiren son tasarım unsurudur.