"PointOnNavMesh" returns null if X or Z position are equal or near zero

“PointOnNavMesh” returns null if X or Z position are equal or near zero

var recastGraph = (RecastGraph)AstarPath.active.graphs.First();
var resultIsNull = recastGraph.PointOnNavmesh(transform.position, NNConstraint.None) == null;
Debug.Log($"PointOnNavmesh == null: {resultIsNull}; x: {transform.position.x:N8}, y: {transform.position.y:N8}, z: {transform.position.z:N8}");

PointOnNavmesh == null: True; x: 0.00000000, y: 0.00000000, z: 0.00000000
PointOnNavmesh == null: True; x: -0.16000000, y: 0.00000000, z: 0.00000000
PointOnNavmesh == null: False; x: -0.16000000, y: 0.00000000, z: -0.03000000
PointOnNavmesh == null: True; x: 0.00000000, y: 0.10000000, z: 0.00000000
PointOnNavmesh == null: True; x: 0.00000100, y: 0.00000000, z: 0.00000000
PointOnNavmesh == null: False; x: 0.00000100, y: 0.00000000, z: 0.00000100
PointOnNavmesh == null: True; x: 0.00000000, y: 0.00000000, z: 0.00010000
PointOnNavmesh == null: True; x: 0.00000000, y: 0.00000000, z: 1.00000000
PointOnNavmesh == null: True; x: 0.00000000, y: 0.00000000, z: 0.00000000

Any ideas why it behaves like this?
I assume it’s technically not inside any node, but on the border of multiple nodes, but I still expect it to return one of those nodes (maybe random), not “null”.

Package version: 5.0.3
Unity: 2022.3.21f1

Hi

This is likely due to tiny floating point errors. I’ll add a tiny margin in the next update.