I could be going way off on a tangent here, but I’ll just post some of my findings so far for Vehicle AI. If it interests you, Unreal Tournament has extended the Nav Mesh system massively, and has different path types and proxies for different pawns I believe. Pressing ‘N’ in the UT Editor may induce mini heart-attacks…
In the case of my vehicle AI, I’m trying to do it much the same way as Characters. The end goal is that I would have several different vehicle ‘classes’, which would also have their own Nav-Proxy settings, so that NavMesh generates different grids for each proxy, based on it’s abilities (like what kind of inclines it can travel up, how large the object is etc).
I’ve also (after countless hours spent tracking it down) figured out how the Navigation system talks to a Movement Component. It calls ‘Apply Requested Move’, and feeds in a ‘Velocity’ value which is basically the full-length vector from it’s target position (the next pathpoint) to it’s current position. In the case of character Movement, it normalizes that vector and applies velocity in that direction. Since CMC auto-magically orientates the character to face the direction it’s moving in, it’s quite simple to do. In my case, I overrode ‘Apply Requested Move’ and it checks the dot product of the normalized direction to the target, and the crafts forward vector. It then applies rotational input based on that so that it ends up facing the right way, then it can apply the linear thrust/acceleration.
Somewhere, there’s also a path-finding manager (I think part of the blackboard / behavior tree system maybe?) which tracks whether the AI object is getting closer to it’s path destination or if it’s stuck. if it doesn’t get closer after ‘x’ seconds, then the move fails and the pawn stops moving. I Think this check is ticked in the actual AI task, so you may be able to override that behavior and somehow check if the vehicle is trying to steer or if the steering is stuck.
That latter part makes sense for characters, but in the case of vehicles which can’t turn on-the-spot or want to turn BEFORE they jet off in that direction (or even those that need to go back and forth several times, like wheeled vehicles for instance), it’s blood irritating because the pathing fails if you’re not moving towards that location. Also, because of the steering problem, the majority of your “smart” movement for the object has to be handled in the actually movement component as part of RequestMove() or whatever it’s called, though that’s probably intended since different movement components would move differently anyway.
I’m not sure this is relevant to your question tbh, but I’m all for diversifying the AI engine beyond just characters! I want to keep the awesome flexibility of Navmesh, but I need more control than the AI engine currently seems to give.