Tüm yazılara dön
Unreal EngineGameplay TagsSistem Tasarımı

Tag sistemi: Kod yazmadan gruplama ve kural uygulama

Unreal Gameplay Tags ile ürünleri, depolama alanlarını ve müşteri ihtiyaçlarını tek tek kontrol etmek yerine ortak kurallar üzerinden yönetmek.

15 Ağustos 20263 dk okuma

Tag’ler, ürünleri kod yazmadan gruplamak, filtrelemek ve kurallar uygulamak için kullanabileceğin esnek bir sınıflandırma sistemidir. Bir ürünün adını tek tek kontrol etmek yerine, o ürünün hangi kategoriye veya özelliğe ait olduğunu sorgularsın.

Örneğin OrangeJuice için ürünün kimliği yine bir DataTable satırı veya Product ID olabilir. Tag ise bu ürünün içecek, meyve suyu ve rafta saklanabilir olduğunu belirtir. Böylece kimlik ile sınıflandırma birbirinden ayrılır.

Basit bir ürün tag yapısı

text
Product.Category.Beverage
Product.Type.Juice
Product.Storage.Shelf
Product.Temperature.Ambient

Raf uygunluğu

Bir rafın kabul ettiği ürünleri tek tek tanımlamak yerine, rafa Product.Category.Beverage tag’ini verebilirsin. Ürün rafa konulurken de ürünün bu tag’e sahip olup olmadığını kontrol edersin.

text
Shelf.AcceptedTags:
Product.Category.Beverage

ProductTags HasTag Product.Category.Beverage

Müşteri alışveriş tercihleri

Bazı müşteriler belirli bir ürün değil, bir kategori arayabilir. DesiredTag olarak Product.Category.Beverage tuttuğunda OrangeJuice, Cola veya Water gibi ürünleri tek tek kontrol etmen gerekmez.

text
DesiredTag:
Product.Category.Beverage

İndirim ve kampanyalar

Hafta sonu kampanyasında bütün içeceklere indirim uygulamak istediğinde, kampanyayı Product.Category.Beverage tag’ine bağlayabilirsin. Yeni bir içecek eklendiğinde kampanya kodunu değiştirmen gerekmez.

text
WeekendSaleTag:
Product.Category.Beverage

// Bu tag’e sahip ürünlere yüzde 10 indirim

Depolama kuralları

Depolama alanları için de aynı yaklaşım kullanılabilir. Süt buzdolabına, dondurma dondurucuya, cips ise normal rafa gider. Ürünün saklama biçimi doğrudan Storage tag’i üzerinden belirlenir.

text
Product.Storage.Fridge
Product.Storage.Freezer
Product.Storage.Shelf

Müşteri ihtiyaçları

Müşterinin ihtiyacını da tag ile tanımlayabilirsin. Customer.Need.Drink ihtiyacını karşılayan ürünleri Product.Category.Beverage tag’i üzerinden bulmak, belirli bir ürün adına bağımlı kalmayan daha genel bir sistem sağlar.

text
Customer.Need.Drink

Product.Category.Beverage

Görev ve hedefler

Görev sistemlerinde de tag’ler liste tutma ihtiyacını azaltır. Örneğin oyuncudan belirli ürünleri değil, Product.Type.Juice tag’ine sahip 10 ürün satmasını isteyebilirsin.

text
Sell 10 products with:
Product.Type.Juice

İleride lisans sistemi

Aynı yapı ileride lisans sistemi için de kullanılabilir. Oyuncunun sahip olduğu License.Allowed.Beverage tag’i ile satın almak istediği ürünün kategorisini karşılaştırabilirsin.

text
License.Allowed.Beverage

Neden tag kullanmalısın?

Tag kullanmadığında kod zamanla ürün isimleriyle dolmaya başlar. Yeni bir ürün ekledikçe aynı kontrol listelerini güncellemen gerekir. Tag sistemi ise kuralı ürün adından ayırır ve yeni ürünlerin mevcut kurallara otomatik olarak dahil olmasını sağlar.

text
// Tag olmadan
if Product == Milk
or Product == Cola
or Product == OrangeJuice
or Product == Water

// Tag ile
if ProductTags HasTag Product.Category.Beverage
Tag, ürünün kimliği değil; ürün hakkında kuralların konuştuğu ortak dildir.

Hiyerarşik tag yapısı

Unreal Gameplay Tags hiyerarşik çalışır. Product.Category.Beverage.Juice gibi daha özel bir tag, üst seviye Product.Category.Beverage sorgusuyla da eşleşebilir. Böylece genel ve özel kuralları aynı sistem içinde kullanabilirsin.

Prototip için başlangıç

Prototip aşamasında her şeyi tag yapmaya gerek yok. Başlangıç için gerçekten fayda sağlayacak üç alan yeterli: Product.Category.*, Product.Storage.* ve Product.Type.*. OrangeJuice kimliği ise DataTable satırı veya Product ID olarak kalmalı; tag sadece sınıflandırma ve kural uygulama amacıyla kullanılmalı.