首页 > 代码库 > Unity API 解析(4)—— HideFlags 类

Unity API 解析(4)—— HideFlags 类

HideFlags 为枚举类,用于控制object对象的销毁方法以其在监视面板中的可视性

 

DontSave 保留对象到新场景

如果GameObject 对象被HideFlags.DontSave标识,则在新Scene中GameObject的所有组件将被保留下来,但其子类GameObject对象不会被保留到新scene中

不可对GameObject对象的某个组件如Transform进行HideFlags.DontSave标识,否则无效

即使程序已经退出,被HIdeFlags.DontSave 标识的对象也会一直存在于程序中,造成内存泄漏,应该使用DestroyImmediate手动销毁

using UnityEngine;using System.Collections;public class DontSave_ts : MonoBehaviour {    public GameObject go;    public Transform t;    void Start()    {        //GameObject对象使用HideFlags.DontSave可以在新的scene中被保留        go.hideFlags = HideFlags.DontSave;        GameObject Pl = GameObject.CreatePrimitive(PrimitiveType.Plane);        Pl.hideFlags = HideFlags.DontSave;        //不能对GameObject的组件设置HideFlags.DontSave        Transform tf = Instantiate(t, go.transform.position + new Vector3(2.0f, 0.0f, 0.0f), Quaternion.identity) as Transform;        tf.hideFlags = HideFlags.DontSave;        //导入新场景        Application.LoadLevel("newScene2_unity");    }}
using UnityEngine;using System.Collections;public class NewScene2_ts : MonoBehaviour{    GameObject cube, plane;    void Start()    {        Debug.Log("NewScene2!");    }    //当程序退出时用DestroyImmediate()销毁被HideFlags.DontSave±标识的对象    void OnApplicationQuit()    {        cube = GameObject.Find("Cube0");        plane = GameObject.Find("Plane");        if (cube)        {            Debug.Log("Cube0 DestroyImmediate");            DestroyImmediate(cube);        }        if (plane)        {            Debug.Log("Plane DestroyImmediate");            DestroyImmediate(plane);        }    }}

HideAndDontSave 保留对象到新场景

但不会显示在HIerarchy面板中

HideInHierarchy —— 在Hierarchy面板中隐藏

若要在Hierarchy面板中隐藏不是在脚本中创建的对象,需要在Awake方法中使用HideFlags.HideInHierarchy才能生效

若隐藏父物体,子物体也会被隐藏掉,反之不然

using UnityEngine;using System.Collections;public class HideInHierarchy_ts : MonoBehaviour{    public GameObject go, sub;    public Transform t;    void Awake()    {        //go,sub,gameObject 为已存在对象,需要在Awake方法中使用HideFlags.HideInHierarchy        go.hideFlags = HideFlags.HideInHierarchy;        sub.hideFlags = HideFlags.HideInHierarchy;        gameObject.hideFlags = HideFlags.HideInHierarchy;    }    void Start()    {        //Pl,tf 是在代码中创建的对象,可以在任何方法中使用HideFlags.HideInHierarchy        GameObject Pl = GameObject.CreatePrimitive(PrimitiveType.Plane);        Pl.hideFlags = HideFlags.HideInHierarchy;        Transform tf = Instantiate(t, go.transform.position + new Vector3(2, 0.0f, 0.0f), Quaternion.identity) as Transform;        tf.hideFlags = HideFlags.HideInHierarchy;    }}

HideInInspector —— 在Inspector面板中隐藏

如果一个GameObject 使用了HideFlags.HideInInspector ,则其所有组件将在Inspector面板中被隐藏,但其子对象的组件仍可在Inspector面板中显示

如果只隐藏GameObject对象的某个组件,如Transform,则并不影响GameObject的其他组件如Renderer,Rigidbody等在Inspector面板中的显示状态

NotEditable —— 对象在Inspector面板中的可编辑性

using UnityEngine;using System.Collections;public class NotEditable_ts : MonoBehaviour {    public GameObject go;    public Transform t;    void Start()    {        //GameObject对象使用HideFlags.NotEditable可以使得GameObject的所有组件不可编辑        //GameObject对象使用HideFlags.NotEditable并不影响子类对象的可编辑性        go.hideFlags = HideFlags.NotEditable;        GameObject Pl = GameObject.CreatePrimitive(PrimitiveType.Plane);        Pl.hideFlags = HideFlags.NotEditable;        //对于GameObject的某个组件单独使用HideFlags.NotEditable会使此组件不可编辑,不影响其他组件        t.hideFlags = HideFlags.NotEditable;        Transform tf = Instantiate(t, go.transform.position + new Vector3(2.0f, 0.0f, 0.0f), Quaternion.identity) as Transform;        tf.hideFlags = HideFlags.NotEditable;    }}

Unity API 解析(4)—— HideFlags 类