示例#1
0
    private void Start()
    {
        var sw = new System.Diagnostics.Stopwatch();

        sw.Start();



        for (int x = 0; x < grid.gridSize.x * grid.nodeSize; x += grid.nodeSize)
        {
            for (int z = 0; z < grid.gridSize.z * grid.nodeSize; z += grid.nodeSize)
            {
                for (int y = 0; y < grid.gridSize.y * grid.nodeSize; y += grid.nodeSize)
                {
                    var point = grid.GetNodeCenter(new Vector3(x, y, z) + transform.position);
                    m_usableCheck = nodeValidator.CheckNode(point);
                    gNode         = new GridNode(point, m_usableCheck);
                    if (m_usableCheck)
                    {
                        usableNode.Add(point);
                    }
                    grid.GridBase.Add(point, gNode);
                }
            }
        }
        sw.Stop();
        Debug.Log("Scanning done in " + sw.ElapsedMilliseconds + "ms");
        sw.Reset();
        sw.Start();


        for (int x = 0; x < grid.gridSize.x * grid.nodeSize; x += grid.nodeSize)
        {
            for (int z = 0; z < grid.gridSize.z * grid.nodeSize; z += grid.nodeSize)
            {
                for (int y = 0; y < grid.gridSize.y * grid.nodeSize; y += grid.nodeSize)
                {
                    var m_thisPosition = transform.position;

                    var      point    = grid.GetNodeCenter(new Vector3(x, y, z) + m_thisPosition);
                    GridNode gridNode = grid.GetNode(point);

                    var      forward     = grid.GetNodeCenter(new Vector3(x, y, z + grid.nodeSize) + m_thisPosition);
                    GridNode nodeForward = grid.GetNode(forward);
                    gridNode.AddStaticGridNeighbour(Neighbour.Forward, nodeForward);

                    var      backward     = grid.GetNodeCenter(new Vector3(x, y, z - grid.nodeSize) + m_thisPosition);
                    GridNode nodeBackward = grid.GetNode(backward);
                    gridNode.AddStaticGridNeighbour(Neighbour.Backward, nodeBackward);


                    var      right     = grid.GetNodeCenter(new Vector3(x + grid.nodeSize, y, z) + m_thisPosition);
                    GridNode nodeRight = grid.GetNode(right);
                    gridNode.AddStaticGridNeighbour(Neighbour.Right, nodeRight);

                    var      left     = grid.GetNodeCenter(new Vector3(x - grid.nodeSize, y, z) + m_thisPosition);
                    GridNode nodeLeft = grid.GetNode(left);
                    gridNode.AddStaticGridNeighbour(Neighbour.Left, nodeLeft);


                    var      up     = grid.GetNodeCenter(new Vector3(x, y + grid.nodeSize, z) + m_thisPosition);
                    GridNode nodeUp = grid.GetNode(up);
                    gridNode.AddStaticGridNeighbour(Neighbour.Up, nodeUp);


                    var      down     = grid.GetNodeCenter(new Vector3(x, y - grid.nodeSize, z) + m_thisPosition);
                    GridNode nodeDown = grid.GetNode(down);
                    gridNode.AddStaticGridNeighbour(Neighbour.Down, nodeDown);

                    var      forwardUp     = grid.GetNodeCenter(new Vector3(x, y + grid.nodeSize, z + grid.nodeSize) + m_thisPosition);
                    GridNode nodeForwardUp = grid.GetNode(forwardUp);
                    gridNode.AddStaticGridNeighbour(Neighbour.ForwardUp, nodeForwardUp);

                    var      forwardDown     = grid.GetNodeCenter(new Vector3(x, y - grid.nodeSize, z + grid.nodeSize) + m_thisPosition);
                    GridNode nodeForwardDown = grid.GetNode(forwardDown);
                    gridNode.AddStaticGridNeighbour(Neighbour.ForwardDown, nodeForwardDown);

                    var      backwardDown     = grid.GetNodeCenter(new Vector3(x, y - grid.nodeSize, z - grid.nodeSize) + m_thisPosition);
                    GridNode nodeBackwardDown = grid.GetNode(backwardDown);
                    gridNode.AddStaticGridNeighbour(Neighbour.BackwardDown, nodeBackwardDown);

                    var      backwardUp     = grid.GetNodeCenter(new Vector3(x, y + grid.nodeSize, z - grid.nodeSize) + m_thisPosition);
                    GridNode nodeBackwardUp = grid.GetNode(backwardUp);
                    gridNode.AddStaticGridNeighbour(Neighbour.BackwardUp, nodeBackwardUp);

                    var      leftDown     = grid.GetNodeCenter(new Vector3(x - grid.nodeSize, y - grid.nodeSize, z) + m_thisPosition);
                    GridNode nodeLeftDown = grid.GetNode(leftDown);
                    gridNode.AddStaticGridNeighbour(Neighbour.LeftDown, nodeLeftDown);

                    var      leftUp     = grid.GetNodeCenter(new Vector3(x - grid.nodeSize, y + grid.nodeSize, z) + m_thisPosition);
                    GridNode nodeLeftUp = grid.GetNode(leftUp);
                    gridNode.AddStaticGridNeighbour(Neighbour.LeftUp, nodeLeftUp);


                    var      rightDown     = grid.GetNodeCenter(new Vector3(x + grid.nodeSize, y - grid.nodeSize, z) + m_thisPosition);
                    GridNode nodeRightDown = grid.GetNode(rightDown);
                    gridNode.AddStaticGridNeighbour(Neighbour.RightDown, nodeRightDown);

                    var      rightUp     = grid.GetNodeCenter(new Vector3(x + grid.nodeSize, y + grid.nodeSize, z) + m_thisPosition);
                    GridNode nodeRightUp = grid.GetNode(rightUp);
                    gridNode.AddStaticGridNeighbour(Neighbour.RightUp, nodeRightUp);
                }
            }
        }
        sw.Stop();
        Debug.Log("Scanning done in " + sw.ElapsedMilliseconds + "ms");
    }