Grid.NodeFromWorldPoint C# (CSharp) Method

NodeFromWorldPoint() public method

public NodeFromWorldPoint ( Vector2 worldPosition ) : Node
worldPosition Vector2
return Node
	public Node NodeFromWorldPoint(Vector2 worldPosition) 
	{
		Vector2 transPos2D = myTransform.position;

		float percentX = (worldPosition.x + gridWorldSize.x/2 - transPos2D.x) / gridWorldSize.x;
		float percentY = (worldPosition.y + gridWorldSize.y/2 - transPos2D.y) / gridWorldSize.y;
		percentX = Mathf.Clamp01(percentX);
		percentY = Mathf.Clamp01(percentY);

		int x = Mathf.RoundToInt((gridSizeX) * percentX - 0.5f);
		int y = Mathf.RoundToInt((gridSizeY) * percentY - 0.5f);
		return grid[x,y];
	}

Usage Example

Example #1
0
    IEnumerator FindPath(Vector3 startPos, Vector3 targetPos)
    {
        grid = GetComponent<Grid>();
        Stopwatch sw = new Stopwatch();
        sw.Start();

        Vector3[] waypoints = new Vector3[0];
        bool pathSuccess = false;

        Node startNode = grid.NodeFromWorldPoint(startPos);
        Node targetNode = grid.NodeFromWorldPoint(targetPos);

        if (startNode.walkable && targetNode.walkable) {
            Heap<Node> openSet = new Heap<Node>(grid.MaxSize);
            HashSet<Node> closedSet = new HashSet<Node>();
            openSet.Add(startNode);

            while (openSet.Count > 0) {
                Node currentNode = openSet.RemoveFirst();
                closedSet.Add(currentNode);

                if (currentNode == targetNode) {
                    sw.Stop();
                    print ("Path found: " + sw.ElapsedMilliseconds + " ms");
                    pathSuccess = true;
                    break;
                }

                foreach (Node neighbour in grid.GetNeighbours(currentNode)) {
                    if (!neighbour.walkable || closedSet.Contains(neighbour)) {
                        continue;
                    }

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

                        if (!openSet.Contains(neighbour))
                            openSet.Add(neighbour);
                    }
                }
            }
        }
        yield return null;
        if (pathSuccess) {
            waypoints = RetracePath(startNode,targetNode);
        }
        requestManager.FinishedProcessingPath(waypoints,pathSuccess);
    }
All Usage Examples Of Grid::NodeFromWorldPoint