I am using your A* Pro package with Rotorz Tile System (RTS). One feature that RTS has is the ability to have most of your tiles be on a procedural mesh, that is, they all have a single backing GameObject. In order to use A*, you have to force RTS to generate a collider (and GO) for each tile. That adds, well, squillions of extra, useless GOs to the scene.
However, even the procedural tiles are backed by a Serialized Object which contains info about each tile, including various user flags, and a ‘solid’ flag that can be used to test whether or not a tile is present at that (row,col) location.
It was more expedient for me to add a ‘TileSystem’ ColliderType to Base.cs and add some code to the Check() method which checks the ‘solid’ flag at that position. This works quite well for the grid generator (most appropriate for a 2D tile system). But it means that I have to re-add this code for every update you create.
So here’s a generic suggestion: Add a ‘UserDefined’ ColliderType to Base.cs, and two serialized fields visible in the editor:
CustomCheckTarget - drag-in a GameObject target
CustomCheckMethod - type in the name of a method to call.
Then if Check() found that the ‘type’ is UserDefined, it’d check to see if the fields are populated, then invoke CustomCheck with position, finalradius, and mask. The method would return true if the location wasn’t blocked or false if it is blocked.
Obviously that’s just a sketchy way of describing the idea and there’s probably a better way to do this in the context of your system - but it ought to be clear what’s intended. The upside is that A* can support any sort of variant setup this way, by allowing the passable/unpassable state of a location to be outsourced. And that can be done without the user having to write custom grid generators. Maybe a delegate scheme would be better?