您的位置:首页 > 移动开发 > Unity3D

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

2016-06-12 12:12 477 查看
今有需求,需要在物体隐藏/显示的同时触发一些事件,经过查看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被改变的同一帧执行完毕,所以完全满足 “在游戏对象在隐藏和显示时被触发”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Unity UGUI 编辑器 函数 api