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 57 / 67.

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

Başka bir betiğin SetActive ile açıp kapattığı bir portal, kendi durumunu bildirebilir:

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

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

Sahne başladığında portal Portal open mesajını 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 kapama işlemleri başka bir nesnedeki betik tarafından yapılır.

challenge icon

Görev

Orta

Switchable betiği, Player'ın üzerinde ve başlangıçta gizli olan kalkanı Bubble'ın üzerinde bulunuyor. Player üzerinde target, Bubble'dır ve Space, Bubble'ı açıp kapatır; bu kısım yazılmıştır.

Her Switchable'ın kendisi hakkında bilgi vermesini sağla:

  • her açıldığında, sayaca 1 ekle ve adını, on ifadesini ve sayacı parantez içinde günlüğe yazdır; örneğin Bubble on (2);
  • her kapandığında, adını ve off ifadesini günlüğe yazdır: Bubble off.

Oyun başladığında Player, Player on (1) ifadesini günlüğe yazdırır: o da açılır. Play'e bas, birkaç kez Space'e bas, ardından Check'e 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: sayacı artır ve "<name> on (<count>)" kaydını oluştur
    // Her kapatıldığında: "<name> off" kaydını oluştur
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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