Unity'de Addressables nedir? Resources klasörüne göre avantajları nelerdir?
Cevap
Addressables, asset'leri bir adres (string key veya label) ile asenkron yükleyip bellekten bırakmayı sağlayan, AssetBundle'ların üzerine kurulu bir asset yönetim sistemidir. Asset'ler yerel olarak veya bir CDN'den uzaktan (remote) yüklenebilir.
| Resources | Addressables | |
|---|---|---|
| Yükleme | Senkron ağırlıklı | Asenkron |
| Build'e etkisi | Klasördeki her şey build'e girer, başlangıç süresini uzatır | Gruplar halinde paketlenir |
| Bellek yönetimi | Unload zor | Referans sayımıyla Release |
| Uzaktan içerik / DLC | Yok | Var (content update) |
| Bağımlılık takibi | Yok | Otomatik |
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class EnemySpawner : MonoBehaviour
{
[SerializeField] AssetReferenceGameObject enemyRef;
AsyncOperationHandle<GameObject> handle;
async void Start()
{
handle = Addressables.InstantiateAsync(enemyRef, transform.position, Quaternion.identity);
GameObject enemy = await handle.Task;
}
void OnDestroy()
{
if (handle.IsValid()) Addressables.ReleaseInstance(handle);
}
}Dikkat edilecekler:
- Her
Loadiçin birReleaseolmalıdır; aksi halde bellek sızıntısı olur. Addressables Event Viewer / Profiler modülü ile takip edilir. - Gruplama stratejisi önemlidir: birlikte kullanılan asset'ler aynı grupta olmalı; aksi halde tek bir asset için koca bundle yüklenir.
- Aynı asset'in birden fazla bundle'a kopyalanmasını (duplicate dependency) Analyze aracıyla kontrol edin.
Unity'nin resmi önerisi de Resources klasörünü prototipler dışında kullanmamaktır.
İlgili Unity & C# soruları
- Unity'de Update, FixedUpdate ve LateUpdate arasındaki fark nedir?
- GetComponent çağrılarını neden önbelleğe almalısınız?
- Rigidbody, physics layer'lar ve raycast nasıl çalışır? FixedUpdate neden önemlidir?
- C# delegate, event ve UnityEvent arasındaki farklar nelerdir?
- Unity'de garbage collection neden frame düşüşüne yol açar? Update içinde allocation'dan nasıl kaçınırsınız?
- C#'ta struct ile class arasındaki fark nedir? Value type ve reference type oyunda neden önemlidir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.