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

 

把"EnableComponent"脚本拖动到"Hierarchy"窗口中的"Cube"上,此时在其对应的"Inpector"窗口中的脚本组件中,多了一个"M Mesh"属性。

24

 

把"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)"的勾选去掉,停止运行,控制台显示如下:

25


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

posted @ 2015-06-24 12:30  Darren Ji  阅读(15156)  评论(1编辑  收藏  举报

我的公众号:新语新世界,欢迎关注。