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;
    }
}
时间: 2024-10-25 19:28:47

Unity API 解析(4)—— HideFlags 类的相关文章

Unity API 解析 学习

1 Application类 2 Camera类 3 GameObject类 4 HideFlags类 5 Mathf类 6 Matrix4x4类 7 Object类 8 Quaternion类 9 Random类 10 Rigidbody类 11 Time类 12 Transform类 13 Vector2类 14 Vector3类 1 Application类 1 using UnityEngine; 2 using System.Collections; 3 4 public class

Unity API 解析(3)—— GameObject 类

GameObject 类是Unity场景中所有实体的积累.一个GameObject对象通常由多个组件component组成,且至少含有一个transform组件.   activeSelf 属性 -- GameObject的Active标识 activeInHierarchy 属性的功能是返回GameObject实例在程序运行时的激活状态,它只有当GameObect实例的状态被激活时才会返回true.而且它会受父类对象激活状态的影响.如果其父类至最顶层的对象中有一个对象未被激活,activeIn

Unity API 解析(7)—— Object 类

Object 类是Unity中所有对象的基类   GetInstanceID -- Object 对象ID 每个对象在工程中都有唯一的ID,并且从程序开始运行到结束,除非对象被销毁,否则每个实例对应的ID都不会改变 从GameObject.CreatePrimitive() 或 Object.Instantiate() 中创建或克隆的每个名字相同的GameObject对象都有唯一的ID using UnityEngine; using System.Collections; public cla

Unity API 解析(9)—— Rigidbody 类

模拟 GameObject 对象在现实世界中的物理特性(重力,阻力,质量,速度) 对Rigidbody 对象属性的赋值代码通常放在脚本的OnFixedUpdate 方法中   collisonDetectionMode 属性 -- 碰撞检测模式 刚体的碰撞检测模式有3种 Discrete -- 静态离散检测模式 Continuous -- 静态连续监测模式 ,一般用在高速运动刚体的目标碰撞体上 ContinousDynamic -- 最强的连续动态检测模式 drag 属性 -- 刚体阻力 dra

Unity API 解析(10)—— Time 类

realtimeSinceStartup 属性 -- 程序运行实时时间   smoothDeltaTime 属性 -- 平滑时间间隔 主要用在 FixedUpdate 方法中需要平滑过渡的计算   time 属性 -- 程序运行时间 从游戏启动到现在

Unity API 解析(5)—— Mathf 类

此类属于结构体类型,只有静态属性和静态方法,不可实例化 Deg2Rad 属性 -- 从角度到弧度常量 (2*PI)/360 Rad2Deg 属性 -- 从弧度到角度常量 Infinity 属性 -- 正无穷大   Clamp 方法 -- 返回有限范围值 返回有范围限制的value值 ClosestPowerOfTwo -- 返回2的某次幂 用于返回最接近参数值value的2的某次幂的值 DeltaAngle -- 最小增量角度 (-180,180] InverseLerp -- 计算比例值 (v

Unity API 解析(6)—— Matrix4x4 类

通常用在如摄像机的非标准投影变换等   MultiplyPoint 方法 -- 投影矩阵变换 对点v进行投影矩阵变换 主要用于Camera的投影变换,对于一般物体的矩阵变换用MultiplyPoint3x4方法,不涉及投影变换,计算速度更快 MultiplyPoint3x4 -- 矩阵变换 MultiplyVector 方法 -- 矩阵变换 对方向向量v进行矩阵变换 using UnityEngine; using System.Collections; public class Multipl

Unity API 解析(2)—— Camera 类属性

aspect属性 -- 摄像机视口比例 public float aspect {get ; set ;} 用于获取或设置camera适口的宽高比例值 aspect 只处理摄像机可以看到的试图的宽高比例,而硬件显示屏的作用只是把摄像机的内容显示出来,当硬件显示屏的宽高比例与aspect的比例值不同时,视图将发生变形 using UnityEngine; using System.Collections; public class Aspect_ts : MonoBehaviour { void

Unity API 解析(9)—— Random 类

不可实例化,只有静态属性和静态方法 insideUnitCircle -- 园内随机点 返回半径为1的园内的随机点坐标,Vector2类型 insideUnitSphere -- 半径为1的球内的随机点坐标 onUnitShper  -- 半径为1的球表面的随机点的坐标 using UnityEngine; using System.Collections; public class insideUnitCircle_ts : MonoBehaviour { public GameObject