WorldPartionStreamingSource导致的崩溃

在播放seq的时候,会动态创建基于每个shot位置的StreamingSourceActor,以便播放到指定shot的时候,不会出现画面中有还未加载出来的地形。在这个shot播放完成后,会删除基于这个shot生成的StreamingSourceActor。但是在dev包中,会出现上述堆栈的崩溃。Priority为EStreamingSourcePriority::Highest,其他的都是默认值。

Script Stack (0 frames) :

=== Critical error: ===

LowLevelTasks::FScheduler::ExecuteTask(LowLevelTasks::FTask*) []

LowLevelTasks::FScheduler::WorkerLoop(LowLevelTasks::Private::FWaitEvent*, LowLevelTasks::Private::TLocalQueueRegistry<1024u, 1024u>::TLocalQueue*, unsigned int, bool) []

LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::Private::FWaitEvent*, LowLevelTasks::Private::TLocalQueueRegistry<1024u, 1024u>::TLocalQueue*, unsigned int, bool) []

UE::Core::Private::Function::TFunctionRefCaller<LowLevelTasks::FScheduler::CreateWorker(unsigned int, wchar_t const*, bool, FThread::EForkable, LowLevelTasks::Private::FWaitEvent*, LowLevelTasks::Private::TLocalQueueRegistry<1024u, 1024u>::TLocalQueue*, EThreadPriority, unsigned long long)::$_0, void>::Call(void*) []

FThreadImpl::Run() []

FRunnableThreadPThread::Run() []

FRunnableThreadPThread::_ThreadProc(void*) []

UnknownFunction []

Assertion failed: LocalState == ELevelStreamingState::Removed || LocalState == ELevelStreamingState::Unloaded [File:.\Runtime/Engine/Private/LevelStreaming.cpp] [Line: 2446]

FDebug::CheckVerifyFailedImpl2(char const*, char const*, int, wchar_t const*, …) []

ULevelStreaming::GetLevelStreamingStatus() const []

UWorldPartitionRuntimeLevelStreamingCell::GetStreamingStatus() const []

UWorldPartitionRuntimeHash::GetStreamingPerformance(TSet<UWorldPartitionRuntimeCell const*, DefaultKeyFuncs<UWorldPartitionRuntimeCell const*, false>, FDefaultSetAllocator> const&, bool&) const []

UWorldPartitionStreamingPolicy::UpdateStreamingStateInternal(UWorldPartitionStreamingPolicy::FUpdateStreamingStateParams const&, FWorldPartitionUpdateStreamingTargetState&) []

UE::Tasks::Private::TExecutableTaskBase<UWorldPartitionStreamingPolicy::OnStreamingStateUpdated()::$_0, void, void>::ExecuteTask() []

UE::Tasks::Private::FTaskBase::TryExecuteTask() []

LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask* (bool), 48u>::TTaskDelegateImpl<void LowLevelTasks::FTask::Init<UE::Tasks::Private::FTaskBase::Init(wchar_t const*, LowLevelTasks::ETaskPriority, UE::Tasks::EExtendedTaskPriority, UE::Tasks::ETaskFlags)::‘lambda’()>(wchar_t const*, LowLevelTasks::ETaskPriority, UE::Tasks::Private::FTaskBase::Init(wchar_t const*, LowLevelTasks::ETaskPriority, UE::Tasks::EExtendedTaskPriority, UE::Tasks::ETaskFlags)::‘lambda’()&&, LowLevelTasks::ETaskFlags)::‘lambda’(bool), false>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask* (bool), 48u>&, void*, unsigned int, bool) []

你好,从堆栈看可能是删除actor后主线程loadedlevel被置空导致此时异步线程的状态判断错误,您可以试下在shot播放完成后先StreamingSourceComponent->DisableStreamingSource来关闭其流送功能,再延迟删除actor,或者先调下OnPreChangeStreamingContent等待异步任务结束后再删除actor