Unity'de MonoBehaviour yaşam döngüsü nasıl işler? Awake, OnEnable ve Start arasındaki fark nedir?
Cevap
Bir MonoBehaviour sahneye yüklendiğinde metotlar şu sırayla çağrılır:
- Awake: Nesne yüklenir yüklenmez, script devre dışı olsa bile (GameObject aktifse) bir kez çağrılır. Kendi referanslarını kurmak için kullanılır.
- OnEnable: Bileşen her etkinleştiğinde çağrılır. Event aboneliği için idealdir.
- Start: İlk
Update'ten hemen önce, yalnızca bileşen etkinse bir kez çağrılır. Başka nesnelere bağımlı başlatma işleri burada yapılır. - FixedUpdate / Update / LateUpdate: Her kare (FixedUpdate sabit fizik adımında).
- OnDisable / OnDestroy: Kapanış ve temizlik.
public class Player : MonoBehaviour
{
Rigidbody rb;
void Awake() { rb = GetComponent<Rigidbody>(); } // kendi bileşenlerim
void OnEnable() { GameEvents.OnDamage += TakeDamage; } // abone ol
void Start() { transform.position = SpawnPoint.Instance.Position; } // diğer nesneler hazır
void OnDisable() { GameEvents.OnDamage -= TakeDamage; } // aboneliği bırak
void TakeDamage(int amount) { /* ... */ }
}Temel kural: Awake'te kendini, Start'ta başkalarını başlat. Farklı nesnelerin Awake'leri arasındaki sıra garanti değildir; gerekirse Script Execution Order ayarı kullanılır.
LateUpdate tüm Update'lerden sonra çalıştığı için kamera takibi gibi işler için uygundur.
İ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.