Пример #1
0
    public List <Node> pathFind(int startX, int startZ, int destX, int destZ)
    {
        int n = 0;

        Node startNode  = grid.GetNode(startX, startZ);
        Node targetNode = grid.GetNode(destX, destZ);

        List <Node>    openSet   = new List <Node>();
        HashSet <Node> ClosedSet = new HashSet <Node>();

        openSet.Add(startNode);

        while (openSet.Count > 0)
        {
            n++;
            Node currentNode = openSet[0];
            for (int i = 1; i < openSet.Count; i++)
            {
                if (openSet[i].FCost < currentNode.FCost || openSet[i].FCost == currentNode.FCost)
                {
                    if (openSet[i].hCost < currentNode.hCost)
                    {
                        currentNode = openSet[i];
                    }
                }
            }

            openSet.Remove(currentNode);
            ClosedSet.Add(currentNode);

            if (currentNode == targetNode)
            {
                return(RetracePath(startNode, targetNode));
            }

            foreach (Node neighbour in grid.GetNeighbours(currentNode))
            {
                if (ClosedSet.Contains(neighbour))
                {
                    continue;
                }

                int costToNeighbour = currentNode.gCost + AstarGrid.GetDistance(currentNode, neighbour);

                if (costToNeighbour < neighbour.gCost || !openSet.Contains(neighbour))
                {
                    neighbour.gCost  = costToNeighbour;
                    neighbour.hCost  = AstarGrid.GetDistance(neighbour, targetNode);
                    neighbour.parent = currentNode;

                    if (!openSet.Contains(neighbour))
                    {
                        openSet.Add(neighbour);
                    }
                }
            }
        }
        Debug.Log(n);
        return(null);
    }
Пример #2
0
        private void _findPath(Index target)
        {
            ChangeState(AgentState.Idle);
            var curIndex = AstarGrid.GetIndex(SelfBaseUnit.transform.position);

            AstarGrid.FindPath(curIndex, target, IsTriggerDoTraversal ? Traversal2D : null, OnPathFound);
        }
Пример #3
0
    void Start()    // setup references
    {
        grid     = GameObject.Find("Grid");
        level    = new GameObject[NumberOfLevels];
        level[0] = GameObject.Find("tmapXY_0");
        level[1] = GameObject.Find("tmapXY_1");

        Astar  = GameObject.Find("A*");
        script = Astar.GetComponent <AstarGrid>();
    }
Пример #4
0
 void Start()
 {
     grid = GetComponent <AstarGrid>();
     FindPath(grid.startPos, grid.endPos);
 }
Пример #5
0
 void Awake()
 {
     ag = grid.GetComponent<AstarGrid>();
 }
Пример #6
0
 void Start()
 {
     m_grid = GetComponent <AstarGrid>();
 }
Пример #7
0
 public void Awake()
 {
     Astar = GameObject.FindWithTag("Grid");
     _grid = Astar.GetComponent <AstarGrid>();
 }