创建一个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 initialization
    void Start () {

    }

    // Update is called once per frame
    void 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 initialization
    void Start () {

    }

    // Update is called once per frame
    void 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 initialization
    void Start () {

        //gameObject表示当前物体
        gameObject.SetActive(false);
    }

    // Update is called once per frame
    void 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 initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
}


选中"Hierarchy"窗口中"Cube",把原先的脚本组件删除,再把"DisableDestroy"的脚本拖动其上。

保存,运行游戏,在运行过程中,把"Disable Destroy(Script)"的勾选去掉,停止运行,控制台显示如下:

参考资料:极客学院Unity3D课程

Unity3D实践系列07,组件的启用或禁用开关,物体的的可见或不可见开关,以及相应事件的更多相关文章

  1. Unity3D实践系列11, 组件的添加和访问

    当把一个脚本附加到一个GameObject上的时候,这个GameObject就有了脚本组件. 通过GameObject的属性获取组件 比如如下: [RequireComponent(typeof(Ri ...

  2. Unity3D实践系列04, 脚本的生命周期

    Unity3D脚本生命周期是指从脚本的最初唤醒到脚本最终销毁的整个过程.生命周期的各个方法被封装到了MonoBehaviour类中.具体来说如下: 1.In Editor Mode 编辑模式 当在编辑 ...

  3. ASP.NET Web API实践系列07,获取数据, 使用Ninject实现依赖倒置,使用Knockout实现页面元素和视图模型的双向绑定

    本篇接着上一篇"ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API",尝试获取数据. 在Models文件夹下创 ...

  4. Unity3D实践系列09, 物理引擎与碰撞检测

    在Unity3D中,一个物体通常包含一个Collider和一个Rigidbody.Collider是碰撞体,一个物体是Collider,才可以进行碰撞检测.Collider组件中的"Is T ...

  5. Unity3D实践系列08, MonoBehaviour类的各种触发事件

    在脚本的生命周期中,有Awake, Start, FixedUpdate, Update, LateUpdate等方法,其实这些属于MonoBehaviour类的事件响应方法,是MonoBehavio ...

  6. Unity3D实践系列06,球体撞击物体游戏

    本篇实现一个球体在固定区域移动撞击Cube的游戏. 首先有1个Plane当作地面,1个Sphere当作球体,4个Cube当作墙,12个Cube当作被撞击物体,另外还有球体的撞击计算,在撞击的过程适时显 ...

  7. Unity3D实践系列05,为GameObject添加额外属性

    在Unity中,通常通过脚本为GameObject添加额外的属性.具体有2种方式:一种是通过硬编码为脚本字段赋值,另一种是通过反射在运行时给脚本字段赋值. 脚本通过字段硬编码为GameObject添加 ...

  8. Unity3D实践系列03,使用Visual Studio编写脚本与调试

    在Unity3D中,只有把脚本赋予Scene中的GameObject,脚本才会得以执行. 添加Camera类型的GameObject. Unity3D默认使用"MonoDevelop&quo ...

  9. Unity3D实践系列10, Canvas画布的创建和使用

    Canvas是所有ui元素的父物体. 当添加一个Button类型的GameObject后,在"Hierarch"窗口中自动添加了一个Canvas,以及EventSystem. 在C ...

随机推荐

  1. 【转载】maven pom详解(2)

    setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件:而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和li ...

  2. Linux驱动中completion接口浅析(wait_for_complete例子,很好)

    completion是一种轻量级的机制,它允许一个线程告诉另一个线程工作已经完成.可以利用下面的宏静态创建completion:                          DECLARE_CO ...

  3. java多线程计算和

    如题:如何利用多线程实现1~1000000000的和 本文利用Callable可以返回值的特性,并将执行结果用CompletionService进行存储,最后将分步值累加. import java.u ...

  4. zabbix报警Too many processes on zabbix server

    zabbix大量报警,运行进程过多,但实际有部分机器可以忽略,需要关闭相关的报警 Configuration-->Templates找到Template_Linux点该行的 Triggers选择 ...

  5. C# 特性(Attribute)详细介绍

    1.什么是Atrribute 首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注 ...

  6. 通过anaconda进行python多版本控制

    ---恢复内容开始--- linux与windows通用. 1. 假设电脑上已经转好anaconda3. (anaconda 默认装好了python3.jupyter.spyter) 2. 现在需求是 ...

  7. ida自动编译配置

    这个勾选上,就会出现

  8. 2011TG初赛

    一.单项选择题(共20题,每题1.5分,共计30分,每题有且仅有一个正确选项.) 1. 在二进制下,1011001+( )=1100110. A.1011 B.1101 C.1010 D.1111 B ...

  9. 【Codechef】BB-Billboards

    题解 传说中的--半标准杨表(行单调不增,列单调减) 如果N能整除M,我们把序列分成\(\frac{N}{M}\)段 然后里面要填K个1,显然我每一段必须填K个1,且可以构造出合法的序列,所以最少要填 ...

  10. SpringBoot中使用纯scala进行开发 配置教程 非常简单的案例

    新建项目 建好之后 建一个叫scala的文件夹 并把它标记为root文件夹 修改pom.xml文件 复制粘贴如下内容: 添加的插件的作用,如果不添加,在新建文件的时候右键只能新建java的文件,无法创 ...