今天在做一个自定义的ScriptableObject类的自定义Editor编辑器的时候,发下了一个问题,类里面有一下需要序列化的自定义class,在编辑器里面会默认创建出事例来,而且会实例化到Asset文件中去,不管之前是不是赋值为null,
看来像是unity内部实例化时会把标记[Serializable]的自定义类默认创建出来然后实例化,想要像unity内部类比如GameObject一样实例化引用,是不行的,所有的值都实例化了。为了解决这个问题,只能在自定义class中加了个enable标志位来标识这个类是不是需要使用的,如果是false类似作为null处理。想了一下如果想要实例化引用,只能从UnityEngine.Object上继承,然后自定义class自己也要序列化保存起来,如果是null的话在Asset中会是 {fileID: 0}。另外继承自UnityEngine.Object的物体,好像即便new出事例以后和null比较也可能是true,应该是内部做过处理。另外在Editor中实例化的物体如果继承了ISerializationCallbackReceiver接口,发现OnBeforeSerialize会一直被调用,也不知道是什么原因。
- 本文固定链接: http://www.wy182000.com/2015/12/31/unity-自定义类序列话遇到的问题/
- 转载请注明: wy182000 于 Studio 发表