码迷,mamicode.com
首页 > 编程语言 > 详细

Unity API 解析(4)—— HideFlags 类

时间:2014-11-08 20:47:23      阅读:476      评论:0      收藏:0      [点我收藏+]

标签:des   style   io   color   ar   os   使用   sp   for   

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 类

标签:des   style   io   color   ar   os   使用   sp   for   

原文地址:http://www.cnblogs.com/sprint1989/p/4083946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!