Oynanış etiketleri ile oyun devam ederken belirli bir etiketle işaretlenmiş aktörleri bulabilirsin. Oynanış etiketleri, özellikleri ayarlamak ve referans atamak gerekmeksizin Fortnite için Unreal Editor’de (UEFN) birden fazla aktörle çalışmana olanak tanır. Oynanış etiketleri Verse koduyla oluşturulur ve UEFN’de atanır.
Oynanış etiketlerini kullanmak aşağıdakiler gibi ilgi çekici oynanış fırsatları sunabilir:
Verse ile yazılmış cihazına cihaz referansları eklemek veya var olanları değiştirmek zorunda kalmadan bölüm kurulumunda değişiklik yapma.
Belirli bir etikete sahip tüm aktörleri bulma ve türlerine göre ışıkları açmak ya da bariyerleri açıp kapatmak gibi görevleri yaptırma.
Oyuncu oyunda ilerledikçe hangi aktörlerin aktif olacağını dinamik olarak değiştirmek.
Oyuncunun belirlediği bir zorluk seçeneğine göre aktörleri bir engelli tur için koşula bağlı olarak etkinleştirmek.
Neler Etiketlenebilir?
Şu anda oynanış etiketleri aşağıdakilere atanabilir:
Aşağıdaki bölümlerde projende oynanış etiketlerini nasıl oluşturacağın ve oynanış etiketleriyle nasıl çalışacağın açıklanıyor.
Oynanış Etiketi Oluşturma
Verse kullanarak yeni bir oynanış etiketi oluşturmak için aşağıdaki adımları izle:
Visual Studio Code’da Verse Gezgini ile Verse dosyanı aç.
Verse dosyanın en üst kısmına aşağıdaki kodu ekleyerek
tagsınıfına referans vermeyi etkinleştir.Verseusing { /Verse.org/Simulation/Tags }Etiketsınıfından devralan yeni bir sınıf oluştur. Sınıfının adı, etiketin adını belirler. Bu örnekte sınıfmytagolarak adlandırılmıştır, bu yüzden oynanış etiketinin adı mytag olur.Verse# Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}Verse dosyan şu şekilde görünmelidir:
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /Verse.org/Simulation/Tags } # Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}Yeni oynanış etiketini kullanabilmek için kodunu derlemek üzere Verse dosyanı kaydet ve UEFN araç çubuğunda Verse Kodları Oluştur seçeneğine tıkla.
Oynanış etiketleri hiyerarşik düzene sahip etiketlerdir. Bu etiketlerin sınıf adında _ karakteriyle birbirinden ayrılmış herhangi bir sayıda hiyerarşik seviye bulunabilir.
Editörde oynanış etiketi adı görüntülenirken _ karakterleri “.” karakterine dönüştürülür.
Örneğin, üç aşamalı bir oynanış etiketinin sınıf adı family_genus_species olacak ve editörde “family.genus.species” olarak görünecektir. Burada “family”, hiyerarşideki en kapsamlı tanımlayıcı ve “species” en spesifik tanımlayıcıdır.
"family.genus.species" sınıfının varlığı "family.genus" ile "family" oynanış etiketlerinin de var olduğu anlamına gelmez. Hiyerarşi aşamalarını oluşturmak için bu oynanış etiketlerini Verse’te family ve family_genus sınıf adlarıyla oluşturman gerekir.
Oynanış Etiketi Atama
Bir oynanış etiketi atamak için aşağıdaki adımları izle. Bu örnekte bir cihaz kullanılıyor ancak diğer aktörler için de adımlar aynıdır.
UEFN’deki Anahat Düzenleyici’de etiketlemek istediğin cihazı seçerek ayrıntılar panelini aç. Bu örnekte cihaz, bir Buton cihazıdır.
Ayrıntılar panelinde Yeni Bileşen Ekle seçeneğine tıklayıp açılır menüden Verse Etiket İşaretleme öğesini seç.
Ayrıntılar panelinde ayarlarını görüntülemek için VerseTagMarkup bileşenini seç.
Oynanış Etiketleri altında Etiketler özelliğini düzenle ve oynanış etiketini ekle. Bu örnekte cihaza mytag ekleniyor.
Her bir aktörün aynı anda birden fazla gruba ait olabilmesi için aynı aktöre birden fazla etiket ekleyebilirsin. Birden fazla etiketi olan bir aktörün varsa bu aktörü taşıdığı herhangi bir etiketle bulabilirsin.
Örneğin mytag1 ve mytag2 etiketlerini taşıyan bir aktör, GetCreativeObjectsWithTag(mytag1{}) veya GetCreativeObjectsWithTag(mytag2{}) çağrılarak bulunur.
Oynanış Etiketi Olan Aktörleri Bulma
Oynanış etiketleri atanmış aktörlerin olduğunda bunları bir oyun sırasında Verse’ün GetCreativeObjectsWithTag() fonksiyonunu kullanarak bulabilirsin. Aşağıdaki örnekte GetCreativeObjectsWithTag(mytag{}) işlevini çağırmak mytag etiketinin atandığı tüm aktörleri içeren TaggedDevices sonucunu getirir:
TaggedActors := GetCreativeObjectsWithTag(mytag{})GetCreativeObjectsWithTag() fonksiyon çağrısı, creative_object_interface uygulayan tüm objelerin bir dizisini döndürür. Örneğin, mytag etiketini bölümde hem bir Buton cihazına hem de Özelleştirilebilir Işık cihazına atadıysan bu fonksiyon çağrısı her iki cihazı da döndürür.
NewObjectReference := object_type_to_cast_to[ObjectReference] sözdizimini kullanarak GetCreativeObjectsWithTag() sonucunu uygulama sınıflarından birine dönüştürebilirsin (buna tür dönüştürme adı verilir). Burada object_type_to_cast_to değeri, istediğin obje türüdür. Örneğin, bir Özelleştirilebilir Işık cihazını kapatmak veya açmak istersen TurnOff() ya da TurnOn() fonksiyonunu çağırmadan önce sonucu customizable_light_device türüne dönüştürmen gerekir.
Farklı bir cihaz türü olması gibi durumlarda cihaz ilgili türe dönüştürülemezse tür dönüştürme başarısız olacağından, tür dönüştürme bir başarısız olabilir ifadedir. Örneğin, bir Buton cihazı ile bir Özelleştirilebilir Işık cihazı aynı türde cihazlar olmadığından Buton cihazını bir customizable_light_device sınıfına dönüştüremezsin.
for ifadeleriyle başarısız olabilir ifadeleri bir filtre olarak kullanabilir ve daha sonra for kod blokunda kullanılacak yeni değişkenler oluşturabilirsin. Örneğin, customizable_light_device tür dönüştürmesini for içindeki yineleme ifadesine ekleyebilirsin. Cihaz customizable_light_device sınıfına dönüştürüleceği için ışığı kapatmaya yarayan TurnOff() gibi bu sınıfa özgü fonksiyonlarını kullanabilirsin.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors, LightDevice := customizable_light_device[TaggedActor]):
LightDevice.TurnOff()Aşağıdaki örnekte aktör türünün nasıl kontrol edileceği ve türe göre farklı işlevlerin nasıl çağrılacağı gösteriliyor. Örnek, etiketli aktörün ışığı kapatmak için TurnOff() fonksiyonunu çağırabilen bir Özelleştirilebilir Işık cihazı ya da ışığı kapatmak için Disable() fonksiyonunu çağırabilen bir Bariyer cihazı olup olmadığını kontrol eder.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors):
if (LightDevice := customizable_light_device[TaggedActor]):
# If the tagged actor is a Customizable Light device, turn it off
LightDevice.TurnOff()
else if (BarrierDevice := barrier_device[TaggedActor]):
# If the tagged actor is a Barrier device, turn it off
BarrierDevice.Disable()GetCreativeObjectsWithTag() işlevi çağrıldığında elde edilen liste, önceden bilebileceğin veya etkileyebileceğin herhangi bir metoda göre sıralanmaz. GetCreativeObjectsWithTag() çağrıları arasında aynı etiketi kullanan aktör eklediğin veya kaldırdığın durumlarda elde edilen liste her çağrı sonucu için farklı bir sırada olabilir.
Oyununun aktörleri belirli bir sırayla işlemesi gerekiyorsa, GetCreativeObjectsWithTag() sonucu sıralanmamış bir aktör listesi olduğundan oynanış etiketleri yerine bir düzenlenebilir dizi kullanman gerekir.
Oynanış Etiketleriyle Türe Göre Pozisyon Bulma
Aşağıda GetCreativeObjectsWithTag() çağrısından döndürülen aktörleri türe göre filtrelemeyi ve pozisyonunu yazdırmayı gösteren bir örnek yer alıyor.
# find all actors with the all_tag
AllCreativeObjects : []creative_object_interface := GetCreativeObjectsWithTag(all_tag{})
# Print the position of all creative_prop actors with the all_tag
for (Prop : AllCreativeObjects):
if (Prop := creative_prop[Prop]):
Print("Prop found with all_tag at position: {Prop.GetTransform().Translation}")
# Print the position of all device actors with the all_tag
for (Device:AllCreativeObjects):
Oynanış Etiketleri Kullanan Eğitimleri Keşfetme
Aşağıdaki eğitimler Oynanış Etiketlerinin bir oyunda nasıl kullanılacağını gösteriyor.
Etiketli Işıklar Bulmacası
Oyuncunun Verse ile oluşturulmuş bir cihazı kullanarak bir eşya oluşturmak için doğru açık ve kapalı ışık birleşimini bulmasının gerekli olduğu bir bulmaca oluştur.