请问在什么情况下,Asset子类反序列化会有问题?

版本3.7.3 .在线上发现不少类似的报错。

TypeError: Cannot read properties of null (reading dynamic ) at i.initialize (https://usr/game.js:30:790070) at e.onLoad

发现是Mesh 类里面的_struct 在initialize为空

export class Mesh extends Asset {
...
@serializable
    private _struct: Mesh.IStruct = {
        vertexBundles: [],
        primitives: [],
    };
...

但这个struct 初始化已经赋值了。还会为空,就判断是不是反序列化的问题。

另外类似的为空的地方还有AnimatinClip 的 _events,也可能会是空

TypeError: Cannot read properties of null (reading length ) at i.containsAnyEvent (https://usr/game.js:30:1303066) at i.initialize

export class AnimationClip extends Asset {
...
@serializable
    private _events: AnimationClip.IEvent[] = [];
...

看看有没有什么办法,来避免这种情况发生出现报错,每个做防御代码就太多了。或者在加载的时候给个failed。

赋值放在constructor里面

正常的话,通过反序列化,这些值应该会被具体的资源初始化。例如_struct 应该会是具体的网格数据。
所以就算在constructor里面加了,具体的资源也可能序列化失败,获取不到具体的资源了。
而且这个错误不常见,只在线上报。我做了一些防御代码,也可以让引擎这边看下具体是什么问题。是什么情况下会让反序列化失败,然后是否加到load的失败流程里面。