如果一个组件重写RequiresGameThreadEndOfFrameUpdates,并且返回True的情况,重复调用会导致一个Check崩溃?

如果对某一个组件同一帧内调用两次MarkActorComponentForNeededEndOfFrameUpdate,并且bForceGameThread为True的情况下,是不是肯定会崩溃。因为bForceGameThread的情况下,组件会添加到ComponentsThatNeedEndOfFrameUpdate_OnGameThread,所以在第二次Check时判断check(ComponentsThatNeedEndOfFrameUpdate.IsValidIndex(ArrayIndex));就会出现问题

我的理解没有错误吧,如果是的话,是否这里的Check根据bForceGameThread 修改一下?

Hi,

你好,第二次应该不会走到​check(ComponentsThatNeedEndOfFrameUpdate.IsValidIndex(ArrayIndex));,因为第二次CurrentState 不等于 EComponentMarkedForEndOfFrameUpdateState::Marked而是EComponentMarkedForEndOfFrameUpdateState::MarkedForGameThread

确实是这样,不过也定位了问题,还有一个函数RequiresGameThreadEndOfFrameRecreate需要重写,否则某一次可能使用EComponentMarkedForEndOfFrameUpdateState::Marked,而另外又可能使用EComponentMarkedForEndOfFrameUpdateState::MarkedForGameThread。

好的,请问这个问题不是引擎的问题吧?如果不是的话,后续如果有问题再继续交流。