コード例 #1
0
    protected virtual IEnumerator Navigate(Vector3 destination)
    {
        Node srcNode = Navigation.Instance.NearestTo(transform.position);
        Node dstNode = Navigation.Instance.NearestTo(destination);

        _gizmoRealTarget = dstNode;
        Node reachedDst = srcNode;

        if (srcNode != dstNode)
        {
            rotateInPath = true;
            var path = GraphOperations.AStar(srcNode, dstNode).ToList();

            if (path != null)
            {
                foreach (var next in path.Select(w => FloorPos(w.Content)))
                {
                    RotateInPath(next);
                    while ((next - FloorPos(this)).sqrMagnitude >= 0.05f)
                    {
                        _vel = (next - FloorPos(this)).normalized;
                        yield return(null);
                    }
                }
            }
            reachedDst = path.Last().Content;
        }

        if (reachedDst == dstNode)
        {
            rotateInPath = false;
            _vel         = (FloorPos(destination) - FloorPos(this)).normalized;
            yield return(new WaitUntil(() => (FloorPos(destination) - FloorPos(this)).sqrMagnitude < 0.05f));
        }

        _vel = Vector3.zero;
        OnReachDestination(reachedDst, reachedDst == dstNode);
    }