Nodes themselves do not have a normal. You would have to sorta create your own way of getting that information. It’s come up in a handful of threads, so you can hopefully find some inspiration here:
The nodes themselves don’t really have a normal. So this is not exposed anywhere. The graph visualization will instead position the y coordinate of tile corners at the average of all y coordinates of the nodes that touch that corner.
The relevant code is in the GridGraph.CreateNavmeshSurfaceVisualization method.
There is the MovementPlaneFromGraphSystem.SampleSmoothNavmeshNormal method that you can use, though it’s not really written for ease of use. It’s mostly for internal use.
It handles a lot of edge cases pretty well, though.
Hi
The normal is not explicitly stored for any node, however if you have a navmesh/recast graph you can calculate the normal like this:
TriangleMeshNode triNode = node as TriangleMeshNode;
var normal = Vector3.Cross((Vector3)(triNode.GetVertex(1) - triNode.GetVertex(0)), (Vector3)(triNode.GetVertex(2) - triNode.GetVertex(0)));
You may also be interested in some methods on the TriangleMeshNode class, such as ClosestPointOnNode , ClosestPointOnNodeXZ and ContainsPoint.