[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