- Home /
How to update objects found with a tag?
Hello im having issue with path finding. at the moment I have a room of objects and the player spawns into the room. i also have a grid on each client with path finding. but when a new player spawns into the room the path finding does not update to see the new player. in the grid. how can make it so the grid always updates to find new players with the certain tag.
using UnityEngine;
using System.Collections;
public class Grid : MonoBehaviour {
public GameObject player; //<-----------Player Variable.
public Vector2 gridWorldSize;
public LayerMask unwalkableMask;
public float nodeRadius;
Node[,] grid;
float nodeDiameter;
int gridSizeX, gridSizeY;
void Start(){
nodeDiameter = nodeRadius * 2;
gridSizeX = Mathf.RoundToInt(gridWorldSize.x / nodeDiameter);
gridSizeY = Mathf.RoundToInt(gridWorldSize.y / nodeDiameter);
CreateGrid ();
}
void CreateGrid(){
grid = new Node[gridSizeX, gridSizeY];
Vector3 worldBottomLeft = transform.position - Vector3.right * gridWorldSize.x / 2 - Vector3.up * gridWorldSize.y / 2; ;
for (int x = 0; x < gridSizeX; x ++) {
for (int y = 0; y < gridSizeY; y ++) {
Vector3 worldPoint = worldBottomLeft + Vector3.right * (x * nodeDiameter + nodeRadius) + Vector3.up * (y* nodeDiameter + nodeRadius);
bool walkable = !(Physics.CheckSphere(worldPoint,nodeRadius,unwalkableMask));
grid[x,y] = new Node(walkable, worldPoint);
}
}
}
public Node NodeFromWorldPoint(Vector3 worldPosition){
float percentX = (worldPosition.x + gridWorldSize.x / 2) / gridWorldSize.x;
float percentY = (worldPosition.y + gridWorldSize.y / 2) / gridWorldSize.y;
percentX = Mathf.Clamp01 (percentX);
percentY = Mathf.Clamp01 (percentY);
int x = Mathf.RoundToInt((gridSizeX - 1) * percentX);
int y = Mathf.RoundToInt((gridSizeY - 1) * percentY);
return grid [x, y];
}
void OnDrawGizmos(){
Gizmos.DrawWireCube(transform.position,new Vector3(gridWorldSize.x,gridWorldSize.y,1));
if (grid != null) {
player = GameObject.FindWithTag("player");//<-----find only one player.
Node playerNode = NodeFromWorldPoint(player.transform.position); //------------then adds the position of the player in the grid.
//--------------------------------------i need this to keep checking for new players
foreach (Node n in grid){
Gizmos.color = (n.walkable)?Color.white:Color.red;
if(playerNode==n){
Gizmos.color = Color.cyan;
}
Gizmos.DrawCube(n.worldPosition, Vector3.one * (nodeDiameter - .1f));
}
}
}
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220613200936im_/https://answers.unity.com/themes/thub/images/avi.jpg)