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ştirme.
- Oyuncunun belirlediği bir zorluk seçeneğine göre aktörleri bir engelli tur için koşula bağlı olarak etkinleştirme.
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 Explorer ile Verse dosyanı aç.
- Verse dosyanın en üst kısmına aşağıdaki kodu ekleyerek
tag
sınıfına başvurmayı etkinleştir.using { /Verse.org/Simulation/Tags }
tag
sı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ıfmytag
olarak adlandırılmıştır, bu yüzden oynanış etiketinin adı mytag olur.# Yeni bir oynanış etiketi oluşturmak için Verse.org/Simulation/Tags modülünde `tag` sınıfından türet. mytag := class(tag){}
- Verse dosyan şu şekilde görünmelidir:
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /Verse.org/Simulation/Tags } # Yeni bir oynanış etiketi oluşturmak için Verse.org/Simulation/Tags modülünde `tag` sınıfından türet. 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. Bu işlev hakkında daha fazla bilgi için Oynanış Etiketi Olan Aktörleri Bulma konusuna bakabilirsin.
Oynanış Etiketi Olan Aktörleri Bulma
Oynanış etiketleri atanmış aktörlerin olduğunda bunları bir oyun sırasında Verse’ün GetCreativeObjectsWithTag()
işlevini 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()
işlev ç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 işlev ç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()
işlevini ç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 for
kod bloğunda 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ü işlevleri 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()
işlevini çağırabilen bir Özelleştirilebilir Işık cihazı ya da ışığı kapatmak için Disable()
işlevini çağırabilen bir Bariyer cihazı olup olmadığını kontrol eder.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors):
if (LightDevice := customizable_light_device[TaggedActor]):
# Etiketli aktör bir Özelleştirilebilir Işık cihazıysa kapatmak için
LightDevice.TurnOff()
else if (BarrierDevice := barrier_device[TaggedActor]):
# Etiketli aktör bir Bariyer cihazıysa kapatmak için
BarrierDevice.Disable()
GetCreativeObjectsWithTag()
işlevi çağrıldığında elde edilen liste, önceden bilebileceğin veya etkileyebileceğin herhangi bir yönteme 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.
Oyunun 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.
# all_tag içeren tüm aktörleri bul
AllCreativeObjects : []creative_object_interface := GetCreativeObjectsWithTag(all_tag{})
# all_tag içeren tüm creative_prop aktörlerinin pozisyonunu yazdır
for (Prop : AllCreativeObjects):
if (Prop := creative_prop[Prop]):
Print("Prop found with all_tag at position: {Prop.GetTransform().Translation}")
# all_tag içeren tüm cihaz aktörlerinin pozisyonunu yazdır
for (Device:AllCreativeObjects):
if (Device := creative_device_base[Device]):
Print("Creative device found with all_tag at position: {Device.GetTransform().Translation}")
# all_tag içeren tüm Verse ile yazılmış cihaz aktörlerinin pozisyonunu yazdır
for (VerseAuthoredDevice : AllCreativeObjects):
if (VerseAuthoredDevice := creative_device[VerseAuthoredDevice]):
Print("User device found with all_tag at position: {VerseAuthoredDevice.GetTransform().Translation}")
Oynanış Etiketleri Kullanan Eğitimleri Keşfetme
Aşağıdaki eğitimler Oynanış Etiketlerinin bir oyunda nasıl kullanılacağını gösteriyor.