关于游戏对象隐藏和重新显示之前触发的消息。

今有需求,需要在物体隐藏/显示的同时触发一些事件,经过查看API文档,发现GameObject并没有相关接口,但是脚本的基类MonoBehaviour里面有一下两个函数:

void OnEnable()        // 脚本生效时触发

void OnDisable()      // 脚本失效时被触发


我做了如下测试:

Test脚本挂载在一个cube下,Control脚本挂载在Main Camera下,并在编辑器中,把cube的赋给Control脚本中的public GameObject obj;


</pre><pre name="code" class="csharp">// Test.cs
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour
{
	void Start ()
    {
        //DontDestroyOnLoad(gameObject);
	}
	
	void Update ()
    {
	}

    void OnEnable()
    {
        Debug.Log("script was added              " + Time.frameCount);
    }


    void OnDisable()
    {
        print("script was removed                " + Time.frameCount);
    }
}


// Control.cs
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class control : MonoBehaviour
{
    public GameObject obj;
	// Use this for initialization
	void Start ()
    {
	
	}
	
	// Update is called once per frame
	void Update ()
    {
	    if(Input.GetMouseButtonDown(0))
        {
            obj.SetActive(!obj.activeSelf);
            Debug.Log("Controller :         " + Time.frameCount);
        }

        if (Input.GetMouseButtonDown(1))
        {
            SceneManager.LoadScene(1);
        }
    }
}



运行时,Log日志如下图






测试证明:

1、OnEnable会在脚本从无效变成有效时被触发,包括第一次进入场景时也会被触发(如果初始设置为无效则不会);

2、OnDisable会在脚本从有效变成无效是被触发,包括退出场景时也会被触发;

3、上述两个消息的触发在gameObject的ActiveSelf被改变的同一帧执行完毕,所以完全满足 “在游戏对象在隐藏和显示时被触发”

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值