Navmesh of SubLevel?

I’d invite any more experienced user to correct me if I’m wrong about this, because I’m brand new to unreal engine, but I spent an entire day getting navigation working in my own vr world, and I’d like to share my insights with any other newbie users who may be having difficulty with this.

  1. Both the persistent level and the sub level needs a nav mesh
  2. The nav mesh in the persistent level needs to fully encompass the space that all the sub levels are placed in. The sub level nav mesh only needs to encompass the space of the sub level.
  3. All levels need to be set to visible, then navigation needs to be rebuilt before play testing. Depending on the size of your game, this could take a long time, so I’d recommend only building the persistent level and whatever sub levels you’re play testing, then rebuilding the entire thing when you’re ready to actually publish.

I hope this helps. After struggling for nearly an entire day, this method got navigation working in my entire vr world.

2 Likes

Hey how did u set the recast actor to dynamic could u show me how

I can confirm that it’s working, one small detail is that persistent level needs to be set to invisible when building navmesh for all levels. Otherwise navmesh won’t build - it will show progress and will take a long time, but navmesh itself won’t be there.

One limitation of this method is that it might not be possible for big worlds. Works fine for my 16 test tiles, but thousands of tiles? It’ll probably fail to load in editor. If building navmesh for each level separately there’s a disconnect between tiles. I’m not sure yet how bad it is, probably I’ll need some way to move AI actors between tiles that doesn’t depend on navmesh.

Or maybe just improvise and build as navmesh pieces as big as possible and also create natural looking obstacles where navmesh disconnects?

I’m surprised there’s no documentation about static streamable navmesh for world composition. Seems like nearly every game project with big world needs it.

2 Likes

There is still no actual documentation that covers this workflow.

Why?

And look at this picture I am getting. If none of those other levels are visible, why would the navmesh of this level be affected?

2021 - this is the answer. The persistent level NAVmesh does NOT need geometry in order to provide navmesh data to sublevels, it simply needs to exist, in a large enough span where the sublevels are encapsulated by it.

Also have NAV mesh in your streaming levels where you want it.

1 Like

Can confirm this workflow for 4.26.2
It’s incredible how bad this practice is documented.

OLD Post.
Wants to add some Information to the thread.
I managed to fix that issue by checking ‘Block On Load’ in my blueprints when Loading Stream Level. I also checked ‘Force Rebuild On Load’ In my project settings. If you have one Nav Mesh covering both sub level, It will generate properly.

Time for the yearly bump. UE 5.2, OpenXR project. The intent is to use navmesh with the teleportation system provided in the VR pawn from the VR template.

My setup is:

  • “Dummy” navmesh bounds volume in persistent level, encompassing entire level
  • Recast Navmesh actor in persistent level, generation set to static (I do not consider dynamic to be a solution)
  • Proper navmesh bounds volume in each sublevel, covering only the sublevel area

Preparation:

  • Hide persistent level
  • Show all sublevels
  • Build Paths so all sublevel nav meshes are created
  • Confirm with ‘P’ key

Result:

  • Can see and move Teleportation Ring, but cannot actually teleport anywhere

Alternate Setup:

  • Same as above, except…
  • Remove persistent level navmesh bounds volume (so only the sublevel ones exist)

Preparation:

  • Same as above

Result:

  • Initially CAN teleport around the loaded sublevel, but sublevels streamed in after that are as above (can see Ring but cannot teleport)
  • After adjacent sublevels are streamed back out, part of my initial sublevel’s navmesh stops working (cannot even move the Ring to those areas) and things get a little wonky in general. I believe the areas that stop working look rectangular and may correspond directly to the navmesh tile structure, like certain tiles are streamed out even though they’re still needed.
    – Of note, none of my sublevel navmesh bounds volumes overlap with each other, although I suppose that doesn’t matter much, re: tile generation

Whyyyyy is this still so undocumented and mysterious?

1 Like

Bumping this thread.

I have a setup with nested sub-levels that encompass the same space but are not active at the same time:

image

I want to be able to stream a random sub-level in with a static navmesh manually built. However, if I build navmesh data for all of these sub-levels, that navmesh data is discarded or not recognized when streaming in the sub-level at run time:

I’ve tried every configuration I’ve seen on the internet regarding this concept with no success.

I’ve tried using the world settings to achieve this very simple concept with no success:
image

I’ve tried using “Spawn Nav Data in Bounds Level” and “Force Build on Start” and “Block Initial Load” in every configuration you can think of and still no luck.

I’ve tried with a nav bounds volume in the persistent level and without one.

The closest I got to my goal was building all of the sub-levels together at the same time with a nav bounds in the persistent level, but that results in a messed up navmesh thats not usable. It seems as though having a persistent level nav bounds volume means it will only hang onto the last path build and it will completely delete any other path builds you did for the prior sub-levels.

The documentation on this concept is ashamedly non-existent and the concept, though simple in nature, is obfuscated by the fact that there are so many levers you can pull that seem to do nothing at all or just don’t work together in a variety configurations.

The system feels extremely hard to work with…

Anyway, if anyone out there knows how I could achieve streaming in different levels with manually built static navmeshes, I would greatly appreciate some clarity on it.