Menu
CoddyTech

OnEnable và OnDisable

Thuộc phần Những kiến thức cơ bản về lập trình trong Unity trong hành trình Unity của Coddy. Bài học 72 trên 85.

OnEnable() chạy mỗi khi một script được kích hoạt: khi đối tượng của nó xuất hiện lần đầu (ngay sau Awake()), và mỗi lần đối tượng được hiển thị bằng SetActive(true) hoặc script được bật lại bằng enabled = true. OnDisable() chạy mỗi khi đối tượng bị ẩn, script bị tắt hoặc đối tượng bị hủy.

Một cổng dịch chuyển được script khác mở và đóng bằng SetActive có thể tự ghi nhật ký:

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

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

Cổng dịch chuyển ghi nhật ký Portal open khi cảnh bắt đầu. Ẩn rồi hiển thị lại cổng sẽ ghi nhật ký Portal closed, sau đó là Portal open, trong khi Awake() và Start() không chạy lần thứ hai. Vì vậy, code cần chạy mỗi khi đối tượng xuất hiện, chẳng hạn như đặt lại bộ đếm thời gian hoặc đếm số lượt ghé thăm, cần nằm trong OnEnable(). Khi cổng dịch chuyển bị ẩn, Update() của nó không chạy. Vì vậy, một script trên đối tượng khác sẽ mở và đóng cổng.

challenge icon

Thử thách

Trung bình

Cho mỗi Switchable báo cáo khi được bật và tắt.

  1. Thêm trường int count; và void OnEnable(): tăng count lên 1, sau đó ghi nhật ký name + " on (" + count + ")", chẳng hạn như Bubble on (2).
  2. Thêm void OnDisable() để ghi nhật ký name + " off".

Nhấn Chơi rồi nhấn Space: Console hiển thị Player on (1), sau đó là Bubble on (1) và Bubble off. Rồi nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class Switchable : MonoBehaviour
{
    public GameObject target;

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

    // Mỗi khi đối tượng này được bật: tăng số lần bật và ghi nhật ký "<name> on (<count>)"
    // Mỗi khi đối tượng này tắt: ghi nhật ký "<name> off"
}

Tất cả bài học trong Những kiến thức cơ bản về lập trình trong Unity

Tự luyện tập: Playground Unity