Unity SetActive Event


網上查了一下Unity的SetActive變化事件沒有找到,我想到用另一種思路來實現這個事件通知,它可用來調試是何處把某個gameobject隱藏掉了

Unity提供了這兩個函數,OnEnable,OnDisable,當SetActive時會調用這兩個函數,所在這兩個函數中發出事件就可以實現想要的效果。

用法:新建一個腳本掛在你需要監聽變化的gameobject上,代碼如下

using UnityEngine;
using System;

/// <summary>
/// 把此MonoBehaviour掛在你需要監聽的gameobject上
/// </summary>
public class MonBehaviourEvent : MonoBehaviour
{
    /// <summary>
    /// gameobject的SetActive事件變化通知
    /// </summary>
    public Action<bool> OnActiveChange;

    void OnEnable()
    {
        OnActiveChange?.Invoke(true);
    }

    void OnDisable()
    {
        OnActiveChange?.Invoke(false);
    }
}

擴展SetActive

SetActive(true),會觸發MonoBehaviour.OnEnable()事件,就算對象之前本就是activeSelf=true,事件依然會發生;
SetActive(false),會觸發MonoBehaviour.OnDisable()事件,就算對象之前本就是activeSelf=false,事件依然會發生;

所以在調用SetActive之前需要進行判斷,擴展了如下,對於

public static class GameObjectEx
{
    public static void SetActiveX(this GameObject go, bool state)
    {
        if (go && go.activeSelf != state)
        {
            go.SetActive(state);
        }
    }

    public static void SetActive(this Component go, bool state)
    {
        if (go && go.gameObject && go.gameObject.activeSelf != state)
        {
            go.gameObject.SetActive(state);
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM