Hi,
I’ve made different tags and layer for different meshes of the game environment. And resetting the A* tag by GUO take much time and not easy to update with the model changing. Is there a way like Unity’s Nevmesh baking to set penalty values by Gameobject or Mesh’s Layer or Tag?
I don’t know how to do that by A*'s GraphUpdateObject scripting cause it handles Nodes.
Many thanks,
Yang
1 Like
Hi
Sorry. Currently this is not available from the inspector. I have it on my todo list, but I haven’t gotten to it yet.
If you are using a grid graph you can set it afterwards relatively easily though. You can subclass the GraphUpdateObject like this:
public class MyGUO : GraphUpdateObject {
public override void Apply (GraphNode node) {
RaycastHit hit;
if (Physics.Raycast((Vector3)node.position + Vector3.up, Vector3.down, out hit, 2)) {
var layer = hit.transform.gameObject.layer;
if (layer == 0) {
node.Tag = 0;
} else if (layer == 3) {
node.Tag = 5;
}
// ...
}
}
}
Then you can use it like
var guo = new MyGUO();
// Make sure the bounding box is really large
guo.bounds = new Bounds(Vector3.zero, Vector3.one*1000);
guo.updatePhysics = false;
AstarPath.active.UpdateGraphs(guo);
This will fire a single raycast for each node and change the node’s tag according to whatever object that was hit.