EDIT: changed title, more relevant posts are in the comments.
I was just trying to get started with NavLinks, because I have my basic pathfinding working and now I want to go a little more advanced. I found that the documentation doesn’t explain anything, not even how to set up the most basic “walk off an edge” kind of link, and the general opinion seems to be that NavLinks are extremely limited and can’t even be used to trigger certain actions like jumping etc. Now I’m a bit worried, if my goals can be reached at all
Environments in my game are randomly generated. My plan is to “voxelize” and analyze the environment while it is being generated to automatically place NavLinks where they make sense. This means they get placed at runtime and I hope that’s not a problem (is it??)… These are the kinds of links I have in mind at the moment:
jumping (or just falling) down small heights and climbing up even smaller heights (kind of two-way)
jumping over narrow gaps
climbing up/down ladders, ropes etc.
Am I wasting my time or can I actually do this with NavLinks? Aren’t there any events I can implement to trigger actions related to NavLinks? How else could I do it?
I’m slowly gathering what info there is. Am I right in assuming that SmartLinks are supposed to fulfill exactly this purpose - to allow the triggering of actions, when they are reached by an agent?
I am looking at the header of ANavLinkProxy, and it seems as though I am forced to use blueprints now, because there is only a blueprint-implementable event “ReceiveSmartLinkReached” and a protected event-array “OnSmartLinkReached” that can’t be used with code. That’s lame…
Or maybe I’m supposed to derive from UNavLinkCustomComponent to create specific types of links? It has overridable functions “OnLinkMoveStarted” and “OnLinkMoveEnded”.
What I completely fail to find is anything “cost”-related.
I derived from UNavLinkCustomComponent and implemented overrides for OnLinkMoveStarted and OnLinkMoveFinished. The start-function works as I expected: it gets called when a pawn has reached the link and starts using it. I hope I can later make use of that to trigger jumps, climbing etc.
But the finished-function doesn’t get called when the pawn has reached the other side of the link, but when it completed the whole path that my NavLink is a part of. Is that how it’s supposed to work or am I doing something wrong? This seems rather pointless…
Can someone tell me that OnLinkMoveEnded isn’t bugged? Because it looks very bugged to me. It never triggers on reaching the end-point of the link, but only when the complete move-order and its path are either finished or aborted.
edit: In the event that someone actually views this topic, maybe even someone who is familiar with advanced pathfinding mechanisms, I’ve got another question: are there any events for pawns/nav-agents entering or leaving a certain NavArea-type?? I could really use those to make them start/stop crouching etc. Otherwise I would have to place additional overlap-volumes just for that purpose, and this would probably cause other complications…