Bir önceki adımda komut aldığında ileri gidebilen, sola veya sağa dönebilen bir NPC oluşturmuştuk. Şimdi de bu adımda karakterin üzerinde hareket edebileceği oyun alanları kuracağız.
Bu oyun için oyun alanının aşağıdakileri bilmesi ve yönetmesi gerekir:
Kare Boyutu: Karakter, oyun alanındaki karelerin büyüklüğüne göre ne kadar ileri gitmesi gerektiğini bilir.
Kamera: Karakter bu oyun alanına ulaştığında hangi kameranın kullanılacağını belirtir. Bunun için Sabit Konum Kamerası cihazını kullanıyoruz.
Başlangıç Pozisyonu: Karakterin oyun alanında başlayacağı konum. Bunun için bir Kreatif Nesne kullanıyoruz, böylece onu kolayca düzenlenebilir bir özellik olarak ayarlayabilir ve dönüşümünü alabiliriz.
Son Hedef: Karakterin ilerleyeceği nihai hedeftir; oyun alanının sonuna işaret eder. Bunun için karakter üzerine bastığında sinyal veren bir Tetikleyici cihazı kullanıyoruz.
Engeller: Engeller, karakterin son hedefe hemen ulaşmasını önler. Bunlar, Engelleri Oluşturma bölümünde daha ayrıntılı olarak açıklanıyor.
Bunların hepsi oyun alanının sınıfında (class) takip edilir. Sınıf, concrete (somut) belirticisine sahiptir, dolayısıyla bir Verse cihazında düzenlenebilir bir özellik olabilir ve her sınıf üyesi, değerlerini UEFN üzerinde değiştirebilmek için düzenlenebilir bir özniteliğe sahiptir.
# This class represents the gameboard and how it behaves.
# This class has the concrete specifier so it can be an editable property on a Verse device.
gameboard<public> := class<concrete>:
# The size of each tile on the gameboard. By default set to
# the default Fortnite tile size of 512x512x384.
@editable
TileSize<public>:vector3 = vector3{X:=512.0, Y:=512.0, Z:=384.0}
# The fixed point camera that provides a top-down view of the gameboard
Oyun alanının özellikleri tanımlandığına göre, şimdi de davranışını ekleyelim:
Son hedefi işleme: Oyun alanı kurulduğunda, Son Hedefin
TriggeredEventolayına bağlanacağız. Tetikleyici cihazı karakter tarafından tetiklendiğinde son hedefe ulaşıldığını herkese açık şekilde bildirmek için bir olay işleyici ve bir özel olay kullanırız. Daha ayrıntılı bilgi için Cihaz Etkileşimlerinin Kodlanması bölümüne bakabilirsin.Oyun alanını başlatma: Oyun alanının başlangıcında Kamera cihazını tüm oyunculara ata.
Oyun alanını sonlandırma: Oyun alanının sonunda Kamera cihazını tüm oyunculardan kaldır.
Oyun alanı (gameboard) için tam sınıf aşağıdaki gibidir:
# This class represents the gameboard and how it behaves.
# This class has the concrete specifier so it can be an editable property on a Verse device.
gameboard<public> := class<concrete>:
# The size of each tile on the gameboard. By default set to
# the default Fortnite tile size of 512x512x384.
@editable
TileSize<public>:vector3 = vector3{X:=512.0, Y:=512.0, Z:=384.0}
# The fixed point camera that provides a top-down view of the gameboard
Engeller Oluşturma
Engeller, karakterin son hedefe hemen ulaşmasını önler. Bu oyunda engel olarak karakterin hareket etmesini önleyecek Bariyer cihazlarını ve bariyerleri devre dışı bırakan Tetikleyici cihazlarını kullanıyoruz.
Engel (obstacle) sınıfımızın tanımı şunları içerir:
IsObstaclePassed: Bariyerlerin şu anda etkin mi yoksa devre dışı mı olduğu bilgisinin depolanmasıyla ilgili veri. Logic (mantık) türüdür çünkü yalnızca iki durumu vardır.
Barriers: Engelle ilişkili Bariyer cihazları. Yani, bir tetikleyiciye bağlı, devre dışı bırakacağı birden fazla bariyer cihazın olabilir.
BarrierDissolves: Engeller aşıldığında oynatılacak sinematik sekanslar.
BarrierAppears: Engeller sıfırlandığında oynatılacak sinematik sekanslar.
Trigger: Karakterin engeli devre dışı bırakmak için erişebileceği bir Tetikleyici cihazı.
Engelleri temsil eden tam sınıf aşağıda veriliyor. Bu sınıf concrete (somut) belirticisine sahiptir, dolayısıyla bir Verse cihazında düzenlenebilir bir özellik olabilir.
# An obstacle on the gameboard, with an associated set of
# Barrier devices, Trigger devices that deactivate the barriers,
# and Cinematic Sequence devices that play sequences for barriers dissolving and appearing for visual feedback on what is happening.
# This class has the concrete specifier so it can be an editable property on a Verse device.
obstacle := class<concrete>:
# Data for storing whether barriers are currently enabled/disabled.
var IsObstaclePassed:logic = false
# The array of barriers for this obstacle.
Oyun Alanları Ekleme
Oyun alanı tanımlandığına göre, şimdi bu oyun alanlarının bir dizisini Verse cihazına ekleyebilirsin; Verse cihazını daha sonra 6. Oyun Döngüsünü Yönetme bölümünde göreceksin.
VKT - Verse Cihazı Başlangıç Oyunları şablonundan oluşturduğun projede, Anahat Düzenleyicisi’nde Verse Kumandası Mini Oyun cihazını arayıp Ayrıntılar panelini açmak için cihazı seç.
Ayrıntılar panelinde Oyun Alanları altında, oyundaki oyun alanlarına karşılık gelen beş öğe göreceksin. Oyun alanı için hangi cihazların, sinematiklerin ve diğer özelliklerin kullanıldığını görmek için bu öğeleri genişlet.
Oyuna daha fazla bölüm eklemek üzere Oyun Alanları için Öğe Ekle’yi seçerek oyun alanları ekleyebilirsin.
Oyundan bölümleri kaldırmak için kaldırmak istediğin oyun alanının yanındaki açılır menüyü seçerek oyun alanlarını kaldırabilirsin.
Öğeyi basılı tutarak diğer oyun alanı öğelerinin önüne veya arkasına sürükleyip oyundaki bölümdeki sırasını değiştirebilir ve oyun alanlarını yeniden sıralayabilirsin.
Belirli bölümleri test etmek için oyun alanlarını test etmek istediğin bölüm listede ilk sırada olacak şekilde yeniden sıralayabilirsin.
Sonraki Adım
Oyun alanlarını tanımladık ve istediğin kadar oyun alanını nasıl ekleyebileceğini gördük. Sonraki adımda, eğlenceli bulmacalar geliştirmek ve sınırlamaların üstesinden gelmek için oyun alanlarını nasıl tasarlayacağını öğreneceksin.