void LateUpdate () {
if (prevNode == null) {
NNInfo nninfo = AstarPath.active.GetNearest (transform.position);
prevNode = nninfo.node;
prevPos = transform.position;
}
if (prevNode == null) {
return;
}
if (prevNode != null) {
IRaycastableGraph graph = AstarData.GetGraph (prevNode) as IRaycastableGraph;
if (graph != null) {
GraphHitInfo hit;
if (graph.Linecast (prevPos,transform.position,prevNode, out hit)) {
hit.point.y = transform.position.y;
Vector3 closest = AstarMath.NearestPoint (hit.tangentOrigin,hit.tangentOrigin+hit.tangent,transform.position);
Vector3 ohit = hit.point;
ohit = ohit + Vector3.ClampMagnitude((Vector3)hit.node.position-ohit,0.008f);
if (graph.Linecast (ohit,closest,hit.node, out hit)) {
hit.point.y = transform.position.y;
transform.position = hit.point;
} else {
closest.y = transform.position.y;
transform.position = closest;
}
}
prevNode = hit.node;
}
}
prevPos = transform.position;
}
}