为什么没有IAwakeAsync这种接口,比如一个活动组件加到Scene上,Awake的时候需要从数据库中查询数据。
得自己写个async Init吧
public void Awake() { AsyncInit().Coroutine(); }
public async ETTask AsyncInit() { }
BigLion 之前这么写过,然后发现有些组件的添加有先后关系,后一个组件需要用前一个组件的数据,前一个组件还没加载完,后一个组件又要用,所以只能一路await到底。然后当时还是搞了个async Init的方法。
最后还是搞了个IAwakeAsync的接口,专门给Scene用
await Scene.AddComponent<XXXComponent>().InitAsync();
Binary 我之前确实是这么写的,后来发现如果这个XXXComponent如果有Child,并且Child是ISerializeToEntity的,在InitAsync的方法里写从数据库查询XXXComponent,查询到的XXXComponent如果没有Parent,拿不到其中的Children,因为childrenDB是private的,在SetParent后才加到Children中,就挺尴尬的,因为 await Scene.AddComponent<XXXComponent>().InitAsync() 这句代码先调用了AddComponent,Scene已经有这个组件了,就不能再加到这个Scene上了。 PS:ET 7.2
await Scene.AddComponent<XXXComponent>().InitAsync()
IxbxAx 你都给自己加上了 这个组件,为什么还要从数据库里拿这个组件? 你该不会以为从数据库拿出这个组件,然后把这个数据库拿出来的组件的数据赋值给 你当前新增的这个组件??? 你数据库里都有这个组件了,你直接调用无泛型的AddComponent(XXXComponent)不就完了,怎么可能这么奇葩到去操作 ChildRen?