zoukankan      html  css  js  c++  java
  • 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课程

  • 相关阅读:
    什么是webview
    juqery.fn.extend和jquery.extend
    LeetCode
    5. Longest Palindromic Substring
    42. Trapping Rain Water
    11. Container With Most Water
    621. Task Scheduler
    49. Group Anagrams
    739. Daily Temperatures
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/darrenji/p/4597384.html
Copyright © 2011-2022 走看看