说明
https://forum.unity.com/threads/understanding-of-hideanddontsave-hide-flag.469947/
官方说明
根据官方说明:对于设置了这个标识的物体,在Inspector面板中不可编辑(可以思考那个default 的 material面板)。这种物体需要在结束的时候,手动销毁(否则会造成内存泄漏(在场景取消加载的时候,可能这玩意也不见了))
使用
Understanding of HideAndDontSave hide flag.
Unity Serialization
image.png
image.png
小结
1.Unity在进入播放模式&退出播放模式,或脚本重新编译时,经历了几个步骤:
- 1:将所有可序列化数据拉出托管范围,在UnityC++端创建数据的内部表示
- 2:销毁所有与Unity相关的内存/信息,重新加载程序集
- 3:将C++中保存的数据重新序列化到Unity本地
2.经过如上步骤,普通的类经过序列化及反序列化,它们这些操作会独立的进行;这意味着一个类可能会被反序列化多次,而假如对象间存在引用关系,它们之间的引用会丢失。
3.此时需要ScriptableObject登场了。顾名思义,它是个Object,就是实际存在的对象,并且可以编程。(若在文件区中创建一个这个资源文件,它在运行的时候如果被场景引用,它就从一个死的资源文件自动变成一个活得对象。)在进入播放模式&退出播放模式时其运行流程如下:
- 1:ScriptableObject构造函数被调用
- 2:数据从Unity的C++端序列化到ScriptableObject中
- 3:ScriptableObject的OnEnable方法调用
4.HideFlag用途:作为一个对象如果没有被引用就会被当作垃圾回收。设置这个标志会将其设为Scene的类似子节点,但不会在Hierarchy面板中显示。这样这个对象就不会因为程序集重载而消失(每次播放停止都会造成重新加载及序列化一遍)。这个对象销毁方式:手动调用Destroy。
网友评论