Implementing player movement across ceilings and walls

Currently prototyping a project and trying to ascertain the viability of this package. We would essentially use this package to confine the player to some kind of navmesh such that could walk up certain walls, across ceilings and other potentially non-uniform surfaces. I’ve done some experimentation with it and it seems like a navmesh (ground movement) connected to point graphs (walls, ceilings etc.) is the only way to achieve this.

Is this correct or is there a better way of achieving this? Ideally we’d want some notion of a local ‘up’ vector, which you could calculate from adjacent nodes. Point graphs seem a bit fiddly and might not be robust enough.


With the beta you can manually create a navmesh (e.g. in blender) and run pathfinding on it. However there are no built-in movement scripts that would allow you to navigate on those surfaces. You would have to write your own.
It would also have to be a static graph since there is no way to automatically generate such a graph.

See also (movement scripts do support spherical worlds, but walls and ceilings would be very tricky for them to handle).

Ok thanks for the advice. I’ve managed to roughly approximation what I need by using an authored navmesh and monkeying around with the rotation code a bit. The player is a first person character using a modified movement script that essentially makes a very small path in the movement direction each frame.

The nodelink3 script doesn’t seem to work for me at all. I’ve basically snipped off a bit of the custom navmesh and tried to link two adjacent edges with a nodelink3 and it doesn’t work. It seemed to work one way with a simple smooth mod on the player, but not at all with the funnel mod. I’m essentially looking for a way to disable bits of navmesh on the fly.

Is there is a better way of doing any of this?


NodeLink3 is very rarely used and it will not work for a non-planar navmesh I’m afraid.

If you want to disable parts of the navmesh on the fly I would recommend just using a GraphUpdateObject to mark a collection of nodes as unwalkable. See