0评论

Unity3d 隐藏GameObject的方法

清风 2018-10-10 76浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏开发行业精英群711501594

本篇文章的主要内容是简单介绍Unity3d中隐藏GameObject的三种方式,大家可以选择其中适合自己的方法应用到项目中去。

隐藏GameObject

使用版本:Unity3d 5.x

Destroy方法

Destroy方法顾名思义是销毁的意思。使用该方法可以将改GameObject从场景中销毁,来隐藏物体。
public GameObject obj;
//销毁物体
Destroy(obj);

Renderer的enabled属性

你可以通过GameObject的Renderer的enabled属性的布尔值来控制场景是否渲染该物体。
public GameObject obj;
//隐藏物体
obj.GetComponent<Renderer>().enabled = false;
//显示物体
obj.GetComponent<Renderer>().enabled = true;

当你设置为false

SetActive方法

众所周知每个GameObject都有一个active属性,你可以通过SetActive方法来选择是否激活该物体,activeSelf方法可以用来来查看物体的当前局部的激活状态。
public GameObject obj;
//隐藏物体
obj.SetActive(false);
//显示物体
obj.SetActive(false);

注意:
你的父物体通过SetActive设置为不激活的状态的时候,并不影响子物体的激活状态。但是子物体也不会显示因为被父物体覆盖。

所以SetActive只会影响到自身的激活状态。

隐藏子物体

1.通过Active隐藏子物体在Unity3d 版本4.0之前是可以使用SetActiveRecursively方法的。
如果你现在Unity3d 版本5.x控制整个物体子物体的激活状态,则需要进行一次遍历遍历父物体的所有子节点。
     private void SetChildrenActive (GameObject obj, bool active) {
            for(int i=0; i < obj.transform.childCount; i++) {
                GameObject childObj = obj.transform.GetChild(i).gameObject;
                childObj.SetActive (active);
            }
        }

2.同样的你也可以使用同样的过程使用Renderer.enabled来控制。