关于游戏对象隐藏和重新显示之前触发的消息。
2016-06-12 12:12
477 查看
今有需求,需要在物体隐藏/显示的同时触发一些事件,经过查看API文档,发现GameObject并没有相关接口,但是脚本的基类MonoBehaviour里面有一下两个函数:
我做了如下测试:
Test脚本挂载在一个cube下,Control脚本挂载在Main Camera下,并在编辑器中,把cube的赋给Control脚本中的public GameObject obj;
运行时,Log日志如下图
测试证明:
1、OnEnable会在脚本从无效变成有效时被触发,包括第一次进入场景时也会被触发(如果初始设置为无效则不会);
2、OnDisable会在脚本从有效变成无效是被触发,包括退出场景时也会被触发;
3、上述两个消息的触发在gameObject的ActiveSelf被改变的同一帧执行完毕,所以完全满足 “在游戏对象在隐藏和显示时被触发”
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被改变的同一帧执行完毕,所以完全满足 “在游戏对象在隐藏和显示时被触发”
相关文章推荐
- Android Manifest 用法
- 什么是 GraphQL?
- Spark RDD API详解(一) Map和Reduce
- Spring Boot 开发微服务
- lwn拾遗:[sn3218 led drivers]-api解释-1
- 页面元素查找之Selectors API
- 一步一步跟我学易语言之第二个易程序菜单设计
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- 一个小型js框架myJSFrame附API使用帮助
- 关于C#中排序函数的总结
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- 详细分析交换机、路由器、集线器的区别和联系
- PowerShell打开或关闭光驱
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- 批处理的api WMIC学习体会有感第1/2页