PCGVolume を別レベルにコピー&ペーストした際に、コピー元のレベルで生成されたスタティックメッシュがコピー先にも残る

再現プロジェクトのご用意ありがとうございます。

UE-283330 Generated instances can not be cleaned up when PCGVolume is copied to a different level としてバグ登録させていただきました。

UE5.4にレベルを超えてコピーされたPCGVolume内のコンポーネントを消す方法はありません。

UE5.5であればCtrlキーを押したままCleanupボタンを押すことで強制パージ処理を行って削除することが可能です。

正式な修正がエンジンに適用されるまで、UE5.4では以下のいずれかのワークアラウンドを検討できます。

1.エディタユーティリティなどで、PCGHelpers::DefaultPCGTagをコンポーネントタグとして設定されているコンポーネントを削除する機能を実装する

2.クリーンナップ処理(UPCGComponent::CreateCleanupTask)にコードを加えて手動で削除できるようにする。以下は実装例です。

FPCGTaskId UPCGComponent::CreateCleanupTask(bool bRemoveComponents, const TArray<FPCGTaskId>& Dependencies) { ... if (!Resource || Resource->Release(bRemoveComponents, Context->ActorsToDelete)) { ... // Returning false means the task is not over return false; } else { #if 1 //ワークアラウンド TArray<UActorComponent*> ActorComponentList; ThisComponent->GetOwner()->ForEachComponent(/*bIncludeFromChildActors=*/true, [&ActorComponentList](UActorComponent* ActorComponent) { if (ActorComponent && ActorComponent->ComponentHasTag(PCGHelpers::DefaultPCGTag)) { ActorComponentList.Add(ActorComponent); } }); for (UActorComponent* ActorComponent : ActorComponentList) { ActorComponent->DestroyComponent(); } #endif //ワークアラウンド ThisComponent->GeneratedResourcesInaccessible = false; }3. UE5.5の FPCGComponentDetails::OnCleanupClicked 中から呼び出されているCleanupLocalDeleteAllGeneratedObjectsをUE5.4に取り込んで利用する

4.テキストをコピーしてクリップボード経由で張り付けるような運用を行っている場合、InstancedStaticMeshComponentが記述されている部分を削除したテキストを用意しておく