启用WorldPartition后,PIE下BlockingVolume会在世界大纲中消失且ShowCollision也无法显示预览线框,但却客观存在

感谢​反馈,第一次我理解您是不知道怎么确定碰撞的是哪个对象,我又仔细看了下发现你的意思是wp中BlockingVolume在pie下不会显示在outliner中,我debug了一下原因是BlockingVolume在outliner在pie的时候被过滤掉了,在ActorEditorUtile.cpp中会检查场景中的actor是否是BuliderBrush,在wp之前默认是场景中第二个对象是builder brush,但是由于wp的引入,场景中带有is spatially loaded的对象会通过level instance加载并不会放到主关卡中,因此被放入level instance中的BlockingVolume也会放到第二个对象中,而且由于继承于ABrush因此会被错误的认为是builderBrush

namespace FActorEditorUtils
{
	bool IsABuilderBrush( const AActor* InActor )
	{
		bool bIsBuilder = false;
#if WITH_EDITOR		
		if ( InActor && InActor->GetWorld() && !InActor->HasAnyFlags(RF_ClassDefaultObject) )
		{
			ULevel* ActorLevel = InActor->GetLevel();
			if ((ActorLevel != nullptr) && (ActorLevel->Actors.Num() >= 2))
			{
				// If the builder brush exists then it will be the 2nd actor in the actors array.
				ABrush* BuilderBrush = Cast<ABrush>(ActorLevel->Actors[1]);
				// If the second actor is not a brush then it certainly cannot be the builder brush.
				if ((BuilderBrush != nullptr) && (BuilderBrush->GetBrushComponent() != nullptr) && (BuilderBrush->Brush != nullptr))
				{
					bIsBuilder = (BuilderBrush == InActor);
				}
			}			
		}
#endif
		return bIsBuilder;
	}

​您可以在本地把if ((ActorLevel != nullptr) && (ActorLevel->Actors.Num() >= 2)) 改成 if ((ActorLevel != nullptr) && !ActorLevel->IsWorldPartitionRuntimeCell() && (ActorLevel->Actors.Num() >= 2))​ 来绕过

我本地测试了下正常了我上传了视频,这个问题我会提个Jira在后面修掉​