Unity—HideFlags用法

HideFlags

HideFlags枚举

属于Object类的属性;对应一个枚举类;

用来控制对象的销毁,保存和是否在inspector界面中可见;

public enum HideFlags
  {
    //默认
    None = 0,
    //不在层级界面显示
    HideInHierarchy = 1,
    //inspector界面不可见
    HideInInspector = 2,
    //编辑的时候不会被保存
    DontSaveInEditor = 4,
    //inspector不可以编辑
    NotEditable = 8,
    //构建时不会被保存
    DontSaveInBuild = 16, 
    //不能通过Resources.UnloadUnusedAssets被卸载
    DontUnloadUnusedAsset = 32,
    //几个拼接
    DontSave = DontUnloadUnusedAsset | DontSaveInBuild | DontSaveInEditor, 
    //几个拼接
    HideAndDontSave = DontSave | NotEditable | HideInHierarchy,
  }

测试代码:

public class HideFlagTest : MonoBehaviour
{
    private void Start()
    {
        gameObject.hideFlags = HideFlags.HideInInspector;
        transform.hideFlags = HideFlags.NotEditable;
        GetComponent<BoxCollider>().hideFlags = HideFlags.DontSaveInEditor;
    }
}

image-20211007174744958

DontSaveInEditor坑

这个枚举个官方说是在编辑模式的时候不会被保存,但是我测试会没有效果依旧会记录;

另外这里有个很大的坑,使用这个之后物体在场景销毁时候不会跟着销毁,需要使用DestroyImmediate手动销毁;

DontSave解释

保留对象到新场景;

功能说明:此属性的功能是用来设置是否将Object对象保留到新的场景(Scene)中,如果使用HideFlags.DontSave,则Object对象将在新场景中被保留下来,对其使用说明如下:

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

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

(3)即使程序已经退出,被HideFlags.DontSave标识的对象会一直存在于程序中,造成内存泄漏,对HideFlags.DontSave标识的对象在不需要或程序退出时需要使用DestroyImmediate手动销毁;

posted @ 2021-10-07 17:51  小紫苏  阅读(443)  评论(0编辑  收藏  举报