Menu
CoddyTech

OnEnable ve OnDisable

Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 72 / 85.

Bir betik etkin hâle geldiğinde OnEnable() her seferinde çalışır: nesnesi ilk kez göründüğünde (Awake() çağrısından hemen sonra) ve nesne SetActive(true) ile her gösterildiğinde ya da betik enabled = true ile yeniden etkinleştirildiğinde. Nesne her gizlendiğinde, betik devre dışı bırakıldığında veya nesne yok edildiğinde OnDisable() çalışır.

Başka bir betiğin SetActive ile açıp kapattığı bir portal, kendisiyle ilgili bilgi verebilir:

void OnEnable()
{
    Debug.Log("Portal open");
}

void OnDisable()
{
    Debug.Log("Portal closed");
}

Sahne başladığında portal Portal open mesajını günlüğe kaydeder. Portalı gizleyip yeniden göstermek, önce Portal closed, ardından Portal open mesajını kaydeder; Awake() ve Start() ise ikinci kez çalışmaz. Bu nedenle zamanlayıcıyı sıfırlamak veya ziyaretleri saymak gibi her görünüşte gerçekleşmesi gereken kodlar OnEnable() içine yazılır. Portal gizliyken Update() çalışmaz; bu yüzden açma ve kapatma işlemi başka bir nesnedeki betik tarafından yapılır.

challenge icon

Görev

Orta

Her Switchable açılıp kapandığında bunu bildirsin.

  1. Bir int count; alanı ve void OnEnable() ekle: count değerini 1 artır, ardından name + " on (" + count + ")" ifadesini kaydet; örneğin Bubble on (2).
  2. name + " off" ifadesini kaydeden void OnDisable() ekle.

“Oyna” düğmesine bas ve Space tuşuna bas: Konsol önce Player on (1), ardından Bubble on (1) ve Bubble off gösterir. Sonra “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class Switchable : MonoBehaviour
{
    public GameObject target;

    void Update()
    {
        if (target != null && Input.GetKeyDown(KeyCode.Space))
        {
            target.SetActive(!target.activeSelf);
        }
    }

    // Bu nesne her açıldığında: açılma sayısını artır ve "<name> on (<count>)" mesajını günlüğe kaydet
    // Her kapatıldığında: "<name> off" mesajını günlüğe kaydet
}

Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground