zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }
    
  • 相关阅读:
    安装node.js webkit环境[一]
    wpf 窗口最小化后,触发某事件弹出最小化窗口并置顶
    c# 旋转图片 无GDI+一般性错误
    类库里面添加日志记录 log4net
    string转xml
    DES c#加密后java解密
    使用排序字典排序
    怎么让一段xml被识别为字符串
    新装iis 页面503错误 DefaultAppPool停止解决方案
    hession
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/13329933.html
Copyright © 2011-2022 走看看