I’m noticing strange behaviour related to `MapCheck: Error: Level Instance is not using external actors, resave level to add compatibility` and wanted to confirm a few things.
What is the intention of the error? It’s not clear why the combination of `!ULevel::GetIsLevelUsingExternalActorsFromPackage` and `!ULevel::GetIsLevelUsingActorsDescsFromPackage` are problematic, or why the solution should be to enable external actors.
Is the error intended to trigger for empty levels?
Is sharing a level between world partitioned and non-world partitioned maps supported?
Add a empty level to both a world partition map (as a level instance) and non-world partitioned level (as a sub-level). Ensure `Use External Actors` is not enabled on the shared level.
When saving the level in isolation, `UWorld::GetExtendedAssetRegistryTagsForSave` serializes `ActorsMetaData` because `RecastNavMesh-Default` exists in the level and `SupportsExternalPackaging`.
When saving the level in the non-world partitioned context (as a sub-level), `UWorld::GetExtendedAssetRegistryTagsForSave` does not serialize any `ActorsMetaData` because no Actors that `SupportsExternalPackaging` exist under it’s persistent level.
Run mapcheck against the world partitioned map and notice `MapCheck: Error: Level Instance is not using external actors, resave level to add compatibility` because it has a level instance that does not have any `ActorsMetaData` serialized
This message is confusing as it is caused by the LevelInstance Actor’s “Level Behavior” being set with the “Embedded” value. Non-OFPA level cannot be embedded in a WP level and must use the “Standalone” setting which will result in the LI being streamed independently at runtime.
I’m discussing with the team to get this message clarified in a future release.
I got some more details on the message and it’s reason. It turns out that Non-OFPA level are now allowed to be embedded. The LevelInstance level needs to be resaved as the message is saying. I got confused that loading\saving will not add the missing data unless the level is dirtied by modifying an instance (or other means).
That should already be supported in 5.5 so I recommend trying to resave on LI that is causing the MapCheck error to confirm this will add the missing data to the LI Level.
Sorry I missed your question on using the LI in a WP and non-WP context at the same time. That scenario was not considered (and tested) when LevelInstance where designed. I discussed the scenario and the resulting problem with the world building team. We agreed that this should be properly supported and your current problem should be considered as a bug.
This is the root cause of the problem really, we politely ask that the editor explicitly warn the content creator sooner if they’ve done this. Admittedly we’re on 5.5 so perhaps this has been addressed.
Resaving the level in isolation does indeed fix the map check error, but only until the next time it’s saved by a non-partitioned world. see repro steps above:
When saving the level in isolation, `UWorld::GetExtendedAssetRegistryTagsForSave` serializes `ActorsMetaData` because `RecastNavMesh-Default` exists in the level and `SupportsExternalPackaging`.
When saving the level in the non-world partitioned context (as a sub-level), `UWorld::GetExtendedAssetRegistryTagsForSave` does not serialize any `ActorsMetaData` because no Actors that `SupportsExternalPackaging` exist under it’s persistent level.
I suspect this is an edge case not considered, and thus the mapcheck is erroneously complaining about missing ActorsMetadata in an empty world?