感谢反馈,第一次我理解您是不知道怎么确定碰撞的是哪个对象,我又仔细看了下发现你的意思是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在后面修掉