public List <BaseNode> FindPath(int start_x, int start_y, int end_x, int end_y) { open_list.Clear(); close_list.Clear(); Debug.LogError("find type" + findType.ToString()); BaseNode start = mapLists[start_x][start_y]; StartNode = start; BaseNode end = mapLists[end_x][end_y]; if (start.nodeType == NodeType.unwalk || end.nodeType == NodeType.unwalk) { Debug.LogError("寻路终点不可达"); return(null); } start.parentNode = null; start.f = 0; start.g = 0; start.h = 0; close_list.Add(start); //初始,将起点加入到open_list中 //查找8个临近的节点 while (true) { AddNearNodeToOpenList(start.x, start.y - 1, 1, start, end); AddNearNodeToOpenList(start.x, start.y + 1, 1, start, end); AddNearNodeToOpenList(start.x - 1, start.y, 1, start, end); AddNearNodeToOpenList(start.x + 1, start.y, 1, start, end); AddNearNodeToOpenList(start.x - 1, start.y - 1, 1.4f, start, end); AddNearNodeToOpenList(start.x + 1, start.y - 1, 1.4f, start, end); AddNearNodeToOpenList(start.x - 1, start.y + 1, 1.4f, start, end); AddNearNodeToOpenList(start.x + 1, start.y + 1, 1.4f, start, end); //开启列表为空,说明找不到了 if (open_list.Count == 0) { Debug.LogError("not find path"); return(null); } open_list.Sort(Compare); close_list.Add(open_list[0]); start = open_list[0]; //开启下一次遍历 open_list.Remove(open_list[0]); if (start == end) { Debug.LogError("find path"); List <BaseNode> paths = new List <BaseNode>(); paths.Add(end); while (end.parentNode != null) { paths.Add(end.parentNode); end = end.parentNode; } paths.Reverse(); return(paths); } } }