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課程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM