Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class Grid : MonoBehaviour {
- public LayerMask unwalkableMask;
- public Vector2 gridWorldSize;
- 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.forward* 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.forward * (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.z + 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,1,gridWorldSize.y));
- if (grid != null) {
- foreach (Node n in grid) {
- Gizmos.color = (n.walkable)?Color.white:Color.red;
- Gizmos.DrawCube(n.worldPosition, Vector3.one * (nodeDiameter-.1f));
- }
- }
- }
- }
- public class Node {
- public bool walkable;
- public Vector3 worldPosition;
- public Node(bool _walkable, Vector3 _worldPos) {
- walkable = _walkable;
- worldPosition = _worldPos;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement