Hi!
Unfortunately there’s some assumptions that are pretty deeply baked into recast. One of which is the Y-up right-handed (OpenGL style) coordinate system. Changing that would be a pretty significant amount of work that would touch a lot of the library.
The good news is that for your purposes there’s some geometry swizzling you can do to achieve your goal:
1. Take your scene and apply a 90 degree rotation to it before passing it as input to Recast. The rotation should be such that the input geometry becomes aligned to the XZ plane as ground.
2. Run Recast navmesh generation on it as normal and save out the navmesh data. This will give you a navmesh on the XZ plane that is rotated 90 degrees from your input geometry.
3. Simulate the AI navigation using that XZ navmesh, but instead of setting the actor position directly from the result of the AI sim, apply the opposite 90 degree rotation before setting actor positions. This un-rotates the simulation space so it aligns with the XY plane.
The idea is to separate the “simulation space” from the “visual space” in which the actors exist and translate between the two. This will let you use recast and simulate the AI (with detour or something else) in the XZ ground plane, but convert that to XY to actually move the actors. Hope that helps!
Good luck,
Graham