// 计算网格信息 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]; } } } }