@aron_granberg Thanks so much for adding the spherical example on the latest beta! It works great.
I’ve been trying to implement a way to avoid obstacles in real time but I can’t find an efficient way to do it.
Navmesh Cut and Tag Manipulation doesn’t work on this new type of navmeshes.
Does anyone have a method to avoid real time obstacles on spherical navmesh? Thanks.
Here is an example of tag manipulation that took me a bit to figure out. This should work for the planet/ocean dilemma @phil.atha mentioned by simply measuring the distance of each node from the planetCenter and setting it to my ocean tag (1) if it’s shorter then the landRadius… @chocominyo perhaps a similar approach could help you having an obstacle check if nodes are within an obstacle’s bounds?
public NavMeshGraph NMG;
public GameObject Planet;
public Vector3 planetCenter;
public int LandRadius;
public void SetNodes()
{
NMG = AstarPath.active.data.navmesh;
planetCenter = Planet.transform.position;
Vector3 tileV3;
for (int z = 0; z < NMG.tileZCount; z++)
{
for (int x = 0; x < NMG.tileXCount; x++)
{
NavmeshTile tile = NMG.GetTile(x, z);
for (int i = 0; i < tile.nodes.Length; i++)
{
GraphNode node = tile.nodes[i];
tileV3 = (Vector3)node.position;
float dist = Vector3.Distance(planetCenter, tileV3);
if (dist <=LandRadius)
{
// tile.nodes[i].Walkable = false;
tile.nodes[i].Tag = 1;
}
else
{
//tile.nodes[i].Walkable = true;
tile.nodes[i].Tag = 0;
}
}
}
}
}
first if there are any glaring problems with this forgive me. I’m not a great coder AT ALL lol. This took me an embarrassing long time to figure out. I suppose if its for sure a navmesh type then the first two for loops could be done away with and use the line:
NavmeshTile tile = NMG.GetTile(0, 0);
as NavmeshGraphs only have one tile, right?
This above approach left me with some questions however… the line " NMG = AstarPath.active.data.navmesh;" gets the first navmesh type graph on the main A* component. What is an easy way to get a specific navmeshgraph from say 5 different navmesh graphs in one scene?
Also for say an “obstacle” that can set tags within it’s bounds how can one keep a list of nodes affected by it to later reset them once it is moved? Hmmm, maybe just have each obstacle use a list of bools that correspond to each node and cycle through em?
Any recommendations as far as optimally getting nodes within a volume? Thx
So you’re method doesn’t work for my scenario but you got me on the right path. In my case, my planets have mountains, ocean floors, and then clamped areas in the middle. The clamped areas are the ‘safe zones’ where the pathfinding/player can move. Since I happen to know these vertices and my navmesh is 1:1 with the model anyway I can simply iterate through these and then set the matching node position to Walkable since I can be sure the Vector3s are exactly the same. So far this appears to mostly work. Comparing against the distance of the ocean inwards to the center will only work for areas under the seabed.
for (int i = 0; i < verts.Count; i++)
{
NNInfoInternal nnii = graph.GetNearest(verts[i]);
if ((Vector3)nnii.node.position != verts[i])
nnii.node.Walkable = false;
}
Thx for the reply! I had wondered how GetNodes worked! I had to clean up the code a little bit more such as changing tileV3 to nodePosition in the dist calc and changing the tile.nodes[].Tag=1 lines to
node.Tag = 1;
Hi, after about a year now since the spherical pathfinding beta came out i was just wondering if there might be plans to work it permanently into A*PP? Especially as you are now in ernest delving into jobifying… (droooool…)
Hello,Aron,I want to ask whether the newer version has the sphetical beta?I see that the spheretical beta is in the 4.1.2,but i can’t find the related scripts in 4.2.2,such as the script ‘AIPathAlignToSurface’,should I have to use the version 4.1.2 to develop the sphertical system in my game?
I have uploaded beta version 4.3.9 now which includes an updated version of the spherical beta. It now runs on burst as well which means it is wayyy faster.
Hello,aron,How Can I deal with jumping from low to high or from high to low like unity’s offmeshlink?I see similar curves in “Recastexample2”, but can I automatically generate these curves like offmeshlink through this plug-in unit?
The image that @rey4033 is showing is the default unity NavmeshComponents automatic nodelink placement. Where it automatically places nodelinks on the navmeshes.