首页 > 代码库 > 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 类