ActorComponent初始化的问题

如题,我们现在的ActorComponent比较多,并且都比较重度,基本都是必须组件​。在不好裁剪的情况下,有分帧初始化和异步初始化两个路子。

第一个其实不太好,因为看起来不卡主线程了,但是效率仍然比较低。

第二个方案​看了下代码有两个问题,第一个是ActorComponent 看起来应该是没有原生支持异步初始化的? 似乎5.6上有物理组件相关的一些异步优化。另一个是ActorComponent 并不是多线程安全的?

想确认下上面的结论是否正确,是的话5.4之后官方是否有类似的优化可以参考?​

你好,一般场景中大量Actor/Comp的对象的情况一般会建议使用streaming的优化方式,也即在视野范围内的对象使用actor的形式表示去实现交互行为,对于超过了范围内的对象可以退化成低精度的行为表示,比如ISM去代表而不再是actor,随着玩家逐渐移动去用对象池把不需要的对象保存起来,需要加载的时候快速拿出来。这个一个典型的插件就是5.5加入的instanced actor plugin。

引擎默认没有通用的初始化接口,5.6对物理的优化是world partiton的streaming在render和physics states的asynchronous creation/destruction。

想要优化actor comp的初始化开销,一种优化类似GAS的AbilitySystemComp,由于该组件比较重,如果大量可破坏建筑对象需要使用采用延迟生成策略:在第一次交互的时候才生成comp。第二种就是SpawnActorDeferred创建Actor后,不立即调用FinishSpawning,而是隔几帧分批完成,以把构造开销摊开。

我说的是主角这种,所以没法streaming。我看你讲的意思,那还是得分帧完成了。

所以组件异步初始化和线程安全这两个问题其实也是没有处理的就对了吧~​

是的