Unity3D实践系列07,组件的启用或禁用开关,物体的的可见或不可见开关,以及相应事件
创建一个Unity项目。
在"Project"窗口中,在"Asserts"中,添加"_MyScene"文件夹。
点击"File"中的"Save Scene",给Scene命名,并保存到"_MyScene"文件夹。
创建一个类型为"Plane"的GameObject,并调整其大小。
创建一个类型为"Cube"的GameObject,并适当调整大小。
使用脚本控制物体组件的Enable/Disable
选中"Hierarchy"窗口下的"Cube",如果把其对应的"Inspector"窗口中"Meshe Render"的勾选去掉,将会在"Scene"窗口中看到一个空心的Cube。也就是说,组件可以通过显式的方式被声明为Enable或Disable。
还可以通过脚本的方式控制组件的可见性。
在"Project"窗口中,在"Asserts"中,添加"_Scripts"文件夹。
在"_Scripts"文件夹下创建一个名称为"EnableComponent"的脚本,双击,在Visual Studio中打开并编辑。
using UnityEngine;using System.Collections;public class EnableComponent : MonoBehaviour{public MeshRenderer mMesh;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}}
把"EnableComponent"脚本拖动到"Hierarchy"窗口中的"Cube"上,此时在其对应的"Inpector"窗口中的脚本组件中,多了一个"M Mesh"属性。

把"Hierarchy"窗口的"Cube"拖动到"M Mesh"属性值框中,Unity会自动识别Cube上的MeshRenderer,使其成为"M Mesh"的属性值。
现在,我们想当按下键盘上的空格键,让Cube成为空心,即设置Cube脚本组件的"M Mesh"属性值。修改"EnableComponent"脚本如下:
using UnityEngine;using System.Collections;public class EnableComponent : MonoBehaviour{public MeshRenderer mMesh;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {if (Input.GetKeyDown(KeyCode.Space)){mMesh.enabled = false;}}}
保存,并运行游戏。
当按下键盘中的空格键,在"Game"窗口中的Cube自动消失。
如果想通过键盘上的空格键来切换Cube的可见/不可见状态,修改"EnableComponent"脚本如下:
保存,并运行游戏。
当每次按下键盘中的空格键,在"Game"窗口中的Cube要么可见,要么不可见。
使用脚本控制物体的Active/Inactive
再创建一个类型为"Sphere"的球体,适当调整位置和大小。
在"_Scripts"文件夹下创建一个名称为"SetActive"的脚本,双击,在Visual Studio中打开并编辑。
using UnityEngine;using System.Collections;public class SetActive : MonoBehaviour {// Use this for initializationvoid Start () {//gameObject表示当前物体gameObject.SetActive(false);}// Update is called once per framevoid Update () {}}
把"SetActive"脚本拖动到"Hierarchy"窗口的"Sphere"上。
保存,运行游戏,球体不会出现。
当然,物体的可见性最直接的做法是在"Inspector"窗口中显式设置。
OnEnable, OnDisable与OnDestry
这是3个响应事件函数。
OnEnable:当对象变为可用或激活状态时被调调用。
OnDisable:当对象变为不可用或非激活状态时被调用。
OnDestroy:当MonoBehaviour将被销毁时调用。注意,是脚本被销毁时调用,而不是物体被销毁时被调用。
创建一个名称为"DisableDestroy"的脚本,编写如下:
using UnityEngine;using System.Collections;public class DisableDestroy : MonoBehaviour {void OnEnable(){Debug.Log("script was enabled");}void OnDisable(){Debug.Log("script was disable");}void OnDestroy(){Debug.Log("script was destroyed");}// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}}
选中"Hierarchy"窗口中"Cube",把原先的脚本组件删除,再把"DisableDestroy"的脚本拖动其上。
保存,运行游戏,在运行过程中,把"Disable Destroy(Script)"的勾选去掉,停止运行,控制台显示如下:

参考资料:极客学院Unity3D课程
Unity3D实践系列07,组件的启用或禁用开关,物体的的可见或不可见开关,以及相应事件的更多相关文章
- Unity3D实践系列11, 组件的添加和访问
当把一个脚本附加到一个GameObject上的时候,这个GameObject就有了脚本组件. 通过GameObject的属性获取组件 比如如下: [RequireComponent(typeof(Ri ...
- Unity3D实践系列04, 脚本的生命周期
Unity3D脚本生命周期是指从脚本的最初唤醒到脚本最终销毁的整个过程.生命周期的各个方法被封装到了MonoBehaviour类中.具体来说如下: 1.In Editor Mode 编辑模式 当在编辑 ...
- ASP.NET Web API实践系列07,获取数据, 使用Ninject实现依赖倒置,使用Knockout实现页面元素和视图模型的双向绑定
本篇接着上一篇"ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API",尝试获取数据. 在Models文件夹下创 ...
- Unity3D实践系列09, 物理引擎与碰撞检测
在Unity3D中,一个物体通常包含一个Collider和一个Rigidbody.Collider是碰撞体,一个物体是Collider,才可以进行碰撞检测.Collider组件中的"Is T ...
- Unity3D实践系列08, MonoBehaviour类的各种触发事件
在脚本的生命周期中,有Awake, Start, FixedUpdate, Update, LateUpdate等方法,其实这些属于MonoBehaviour类的事件响应方法,是MonoBehavio ...
- Unity3D实践系列06,球体撞击物体游戏
本篇实现一个球体在固定区域移动撞击Cube的游戏. 首先有1个Plane当作地面,1个Sphere当作球体,4个Cube当作墙,12个Cube当作被撞击物体,另外还有球体的撞击计算,在撞击的过程适时显 ...
- Unity3D实践系列05,为GameObject添加额外属性
在Unity中,通常通过脚本为GameObject添加额外的属性.具体有2种方式:一种是通过硬编码为脚本字段赋值,另一种是通过反射在运行时给脚本字段赋值. 脚本通过字段硬编码为GameObject添加 ...
- Unity3D实践系列03,使用Visual Studio编写脚本与调试
在Unity3D中,只有把脚本赋予Scene中的GameObject,脚本才会得以执行. 添加Camera类型的GameObject. Unity3D默认使用"MonoDevelop&quo ...
- Unity3D实践系列10, Canvas画布的创建和使用
Canvas是所有ui元素的父物体. 当添加一个Button类型的GameObject后,在"Hierarch"窗口中自动添加了一个Canvas,以及EventSystem. 在C ...
随机推荐
- js input输入框的总结
一.输入框只能输入数字 原文:https://www.cnblogs.com/sese/p/5872144.html 分享下js限制输入框中只能输入数字的方法,包括整数与小数,分享几个例子,有需要的朋 ...
- java Socket和ServerSocket多线程编程
这是在一本java教材上看到的,做了点修改.具体本教材记不清楚了,Sorry.放在这里,只是让自己需要的时候能够容易找到. 程序分两部分,服务端和客户端.先把服务端运行起来,在运行客户端.整个过程就是 ...
- APP的CPU,内存,耗电,流量测试工具
APP的CPU,内存,耗电,流量测试工具下载地址,后续文章会介绍如何使用Emmagee.itest.gt APP应用的CPU,内存,耗电,流量调查 可和同类产品比较,使用GT等工具:CPU靠syste ...
- Pandas DataFrame数据的增、删、改、查
Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...
- 360加固保的dex脱壳方法
完全测试了看雪论坛的方法,发现并没有脱壳,依然无法反编译 http://bbs.pediy.com/thread-213377.htm 使用上面方法的结果是会得到16个dex文件,只有一个是与程序相关 ...
- JS post提交表单
js post方式提交表单有两种办法,1:AJAX提交 2:在JS里拼出一个form,然后submit 第二种办法的代码 //这个主要是解决给password MD5 var email = 'ema ...
- Linux下配置MySQL需要注意的几点
1.为mysql加上连接数,linux下最大能允许8000个mysql连接. 经验下,设置为3000 [mysqld] max_connections=3000
- Java第三阶段学习(十三、会话技术、Cookie技术与Session技术)
一.会话技术 1. 存储客户端状态 会话技术是帮助服务器记住客户端状态(区分客户端)的. 2. 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术就是记录这 ...
- 003.KVM虚拟机部署-CentOS6.8
一 实验说明 CentOS 7的KVM虚拟机推荐使用qcow2磁盘格式,本实验在KVM中安装CentOS 6.8 64虚拟机. 二 命令部署过程 2.1 上传镜像 使用winscp上传至/data/i ...
- 【python学习-4】可复用函数与模块
1.自定义函数 自定义函数格式如下: def <函数名> (参数列表): <函数语句> return <返回值> #!/usr/bin/python # 定义函数, ...