在播放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