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.
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ı
Product.Category.Beverage
Product.Type.Juice
Product.Storage.Shelf
Product.Temperature.AmbientRaf 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.
Shelf.AcceptedTags:
Product.Category.Beverage
ProductTags HasTag Product.Category.BeverageMüş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.
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.
WeekendSaleTag:
Product.Category.Beverage
// Bu tag’e sahip ürünlere yüzde 10 indirimDepolama 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.
Product.Storage.Fridge
Product.Storage.Freezer
Product.Storage.ShelfMüş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.
Customer.Need.Drink
Product.Category.BeverageGö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.
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.
License.Allowed.BeverageNeden 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.
// Tag olmadan
if Product == Milk
or Product == Cola
or Product == OrangeJuice
or Product == Water
// Tag ile
if ProductTags HasTag Product.Category.BeverageTag, ü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ı.