Inaki Ayucar
Your algorithms will get much more simple if you manage your path finding algorithm and everything just in 2D instead of 3D.
To achieve that, you can store pre-computed information in a 2D map of each part of your scene. That map can include whatever you want (inaccesible areas, obstacles, etc). A typical example is the Height Map, which stores the height of the terrain at each point. This case is very frecuent in racing games. Of course, the map is indexed using the world coords (X,Y) of the player position and can be as accurate as you want (the more accurate, the more memory your map will use, of course).
In the height map example:
Player¡¯s position --> (x,y)
Terrain¡¯s height at player¡¯s position = HeightMap[ x ][ y ]
You can even do some kind of interpolation between the values of the point you¡¯re looking for and it¡¯s neightbours.
To workaround the 3D-2D issue, you can divide your scenes so each part never has more than one height level. For example, if your scene is a building with 6 floors, it can be divided in 6 parts, so each one will have only one map.
This way, the path finding algo. will be much easier.
Regards,