Example #1
0
        // 计算网格信息
        private static void _calculate_grid()
        {
            if (mNode_Graph == null)
            {
                mNode_Graph = new Dictionary <int, Nav2DNode>();
            }
            else
            {
                mNode_Graph.Clear();
            }

            Nav2DNode.Reset_NodeUniqueID_StartFromZero();

            Nav2DNonWalkable[] _areas = GameObject.FindObjectsOfType <Nav2DNonWalkable>();

            foreach (Nav2DNonWalkable _area in _areas)
            {
                _area.UpdateVertexBuffer();
                Vector3[] _vertexs = _area.GetVertexBuffer().ToArray();

                for (int i = 0; i < _vertexs.Length; i++)
                {
                    Nav2DNode _node = new Nav2DNode(_vertexs[i]);
                    mNode_Graph.Add(_node.NodeID, _node);

                    if (!_is_vertext_valid(_vertexs[i]))
                    {
                        _node.ReachAble = false;
                    }
                }

                // 分别将多边形左右节点加入可视列表
                for (int i = Nav2DNode.Node_UniqueID - _vertexs.Length; i < Nav2DNode.Node_UniqueID; i++)
                {
                    if (i - 1 >= 0)
                    {
                        mNode_Graph[i].AdjNodeLeft = mNode_Graph[i - 1];
                    }
                    else
                    {
                        mNode_Graph[i].AdjNodeLeft = mNode_Graph[Nav2DNode.Node_UniqueID - 1];
                    }

                    if (i + 1 < Nav2DNode.Node_UniqueID)
                    {
                        mNode_Graph[i].AdjNodeRight = mNode_Graph[i + 1];
                    }
                    else
                    {
                        mNode_Graph[i].AdjNodeRight = mNode_Graph[Nav2DNode.Node_UniqueID - _vertexs.Length];
                    }
                }
            }
        }