6.5 KiB
🎨 ShiroginSDK Theme System (v1.0.0)
Dynamic UI Skin Management • ServiceLocator Architecture • Scriptable Themes
ShiroginSDK’nin Theme System’i, oyun içi UI öğelerinin (ikonlar, arka planlar, butonlar vb.) görünümünü merkezi ve modüler bir şekilde yönetmeni sağlar.
Tüm temalar enum tabanlı, ScriptableObject destekli, event-driven bir yapıda çalışır.
🚀 1. Amaç
Bu sistemin hedefi, farklı temalar arasında anında geçiş sağlamak ve
UI öğelerinin görünümünü kod değiştirmeden yönetmektir.
Temel Hedefler:
- 🎨 Farklı temalar arasında runtime geçiş
- 🔁 Tema değiştiğinde tüm UI’nın otomatik yenilenmesi
- 💾 Oyuncunun seçtiği temanın kaydedilmesi (
ThemeData) - 🧩 Enum tabanlı erişim (string hatalarına karşı güvenli)
- ⚡
ScriptableObjecttabanlı profil yapısı
🧱 2. Sistem Bileşenleri
| Bileşen | Açıklama |
|---|---|
| ThemeAssetType | Görsel tiplerini (ikon, arka plan, vb.) enum olarak listeler |
| ThemeProfile | Tek bir temaya ait sprite eşlemelerini tutar |
| ThemeRepository | Tüm ThemeProfile varlıklarını barındırır |
| ThemeService | Aktif temayı yönetir, ServiceLocator ile erişilir |
| ThemeImage | UI Image bileşenlerine otomatik sprite ataması yapar |
| ThemeData | Oyuncunun aktif temasını ve açılmış temaları saklar |
🧩 3. ThemeAssetType.cs
UI görsellerinin türlerini enum olarak tanımlar.
Kod içinde string kullanmadan, type-safe erişim sağlar.
public enum ThemeAssetType
{
None = 0,
// ICONS
Icon_SettingsButton,
Icon_VibrationButton,
// BACKGROUNDS
Background_MainMenu,
Background_PopupSuccess,
// CURRENCIES
Icon_Currency_Gold,
Icon_Currency_Gem,
}
🗂️ 5. ThemeRepository
Tüm temaları tek bir ScriptableObject altında toplar.
Örneğin:
DefaultDarkSnowHalloween
Unity’de oluşturmak için:
Right Click → Create → ShiroginSDK → Theme → Theme Repository
Ardından ThemeProfile varlıklarını listeye ekle.
🧠 6. ThemeService (Yeni Sistem)
ThemeService, artık ServiceBase’ten türetilir ve ServiceLocator aracılığıyla erişilir.
Tüm bağımlılıklarını (IDataService, IEventService) otomatik çözer.
Başlatma
ShiroginServiceRegistry.InitializeAll(); çağrısı ile otomatik olarak başlatılır.
SDKConfig.themeRepository üzerinden ThemeRepository referansını yükler.
var themeService = ServiceLocator.Get<IThemeService>();
themeService.SetTheme("Snow");
🎨 Aktif Tema Değiştirme
var themeService = ServiceLocator.Get<IThemeService>();
themeService.SetTheme("Dark");
Bu işlem:
_repositoryiçinden “Dark” temasını bulurThemeChangedevent’ini yayınlarThemeData.ActiveTheme’i kaydeder- Tüm
ThemeImagebileşenlerini otomatik yeniler
🧩 Sprite Alma
var themeService = ServiceLocator.Get<IThemeService>();
var icon = themeService.GetSprite(ThemeAssetType.Icon_SettingsButton);
myButton.image.sprite = icon;
💾 Kaydetme & Yükleme
Aktif tema ThemeData aracılığıyla otomatik olarak saklanır ve oyun açılışında geri yüklenir.
var dataService = ServiceLocator.Get<IDataService>();
var themeData = dataService.Get<ThemeData>();
Debug.Log($"Active Theme: {themeData.ActiveTheme}");
🧰 7. ThemeImage.cs
Herhangi bir Image bileşenine eklenir.
Seçilen ThemeAssetType’a göre sprite’ı otomatik günceller.
Tema değiştiğinde event’ler aracılığıyla yeniden sprite ataması yapılır.
Kullanım:
- UI objene
ThemeImagecomponent’i ekle assetTypealanında örneğinIcon_SettingsButtonseç- Tema değiştiğinde sprite otomatik değişir
💾 8. ThemeData.cs
Oyuncunun aktif temasını ve açılmış temalarını saklar.
Oyun açılışında DataService tarafından otomatik yüklenir.
public class ThemeData : BaseData
{
protected override string PrefsKey => "THEME_DATA";
public string ActiveTheme = "Default";
public List<string> UnlockedThemes = new() { "Default" };
}
🔄 9. Akış Mantığı
[SDKInitializer]
↓
ThemeService → Load from ThemeRepository
↓
ThemeData.ActiveTheme → Set Active
↓
ThemeChanged Event
↓
ThemeImage components update automatically
🌈 10. Tema Geçişi Örneği
using ShiroginSDK.Runtime.Services.Interfaces;
using UnityEngine;
public class ThemeSwitcher : MonoBehaviour
{
public void OnClick_SnowTheme()
{
ServiceLocator.Get<IThemeService>().SetTheme("Snow");
}
public void OnClick_DefaultTheme()
{
ServiceLocator.Get<IThemeService>().SetTheme("Default");
}
}
🌟 11. Özellikler
| Özellik | Açıklama |
|---|---|
| 💾 Kalıcı Kayıt | ThemeData aracılığıyla otomatik kaydedilir |
| 🔄 Gerçek Zamanlı Güncelleme | Tema değişince tüm UI otomatik yenilenir |
| 🧩 Modüler | Yeni tema eklemek yalnızca 1 dakika sürer |
| 🎨 Editor Dostu | ScriptableObject tabanlı sistem |
| ⚡ Optimize | Sadece aktif tema bellekte tutulur |
| 🧱 Tip Güvenli | Enum tabanlı erişim ile string hatası yok |
💡 12. Geliştirici Tavsiyeleri
- Her temaya kısa, net bir isim ver (
Default,Dark,Snow) - Sprite atlaslarını kullanarak performansı artır
ThemeImageile manuel sprite değişiminden kaçın- Tema varlıklarını düzenli tut (
Assets/ShiroginSDK/Themes/) ThemeRepositoryiçine tüm temaları dahil etmeyi unutma
✅ 13. Özet
ShiroginSDK Theme System v1.0.0:
- UI görsellerini tek yerden yönetmeni sağlar
- Oyuncu seçimini kaydeder ve yeniden yükler
- Enum tabanlı tip güvenli sistemle çalışır
ServiceLocatormimarisiyle SDK’nın diğer servisleriyle uyumludur
Prepared by: Emir Han MAMAK
Version: 1.0.0 (2025.10)
Module: ShiroginSDK.Runtime.Services.Implementations.UI.ThemeService
Scriptable Objects :


