[Unity2D]隱藏/顯示物體


    在Unity里面我們創建了一個GameObject放在Hierarchy視圖上,如果要隱藏該物體可以通過Inspector視圖來設置,最頂上的選項,取消選中則隱藏物體。

    當然在實際的游戲編程中,往往是需要通過腳本來控制物體的隱藏和顯示的,下面來看看如何通過代碼的方式來實現:

一、設置Renderer狀態

在游戲的開發中,所有能夠被渲染的物體都包含有一個Renderer組件,使用它可以將物體渲染到屏幕上,那么如果禁用了這一組件的話,自然也就實現了物體的隱藏。

gameObject.renderer.enabled :是控制一個物體是否在屏幕上渲染或顯示  而物體實際還是存在的 只是想當於隱身 而物體本身的碰撞體還依然存在的

using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
        public Transform target;
        void Start(){
        }
 
        void OnGUI(){
                //renderer control
                if(GUILayout.Button("display")){
                        MeshRenderer[] marr = target.GetComponentsInChildren<MeshRenderer>(true);
                        foreach(MeshRenderer m in marr){
                                m.enabled = true;
                        }
                }
                if(GUILayout.Button("hide")){
                        MeshRenderer[] marr = target.GetComponentsInChildren<MeshRenderer>(true);
                        foreach(MeshRenderer m in marr){
                                m.enabled = false;
                        }
                }
        }
}

二、設置Active

gameObject.active :是否在場景中停用該物體   在你gameObject.active =false中 則你在場景中用find找不到該物體,如果該物體有子物體 你要用SetActive(false) 來控制是否在場景中停用該物體(遞歸的)

    void EnableDisable(GameObject what, bool activate)
    {
        #if UNITY_3_5
            what.SetActiveRecursively(activate);
        #else
            what.SetActive(activate);
        #endif
    }

三、設置Layer

假設現有Layer為:

Default = 0,TransparentFX = 1,Ignore Raycase = 2,Water = 4,MyLayer = 8.

設置相機Camera的Culling Mask為:Default+TransparentFX+Ignore Raycase+Water.

那么當設置物體的Layer為MyLayer時候,物體的Layer層在當前相機被忽略,也就相當於隱藏。具體代碼為:

using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
 
        void OnGUI () {
                if(GUILayout.Button("Display")){
                        gameObject.layer = LayerMask.NameToLayer("Default");
                }
 
                if(GUILayout.Button("Hide")){
                        gameObject.layer = LayerMask.NameToLayer("MyLayer");
                }
        }
}

 


免責聲明!

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



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