private List <WaterShore> GenerateWaterShoreList(List <WaterShoreSegment> waterShoreSegmentList) { List <WaterShore> waterShoreList = new List <WaterShore> (); //先把零散的线段第一次刷选,处理成一一系列的WaterInfo for (int i = 0; i < waterShoreSegmentList.Count; ++i) { WaterShoreSegment waterShoreSegment = waterShoreSegmentList [i]; bool hasFind = false; for (int j = 0; j < waterShoreList.Count; ++j) { WaterShore waterShore = waterShoreList [j]; if (waterShore.JoinWaterShoreSegment(waterShoreSegment)) { hasFind = true; break; } } if (!hasFind) { WaterShore waterInfo = new WaterShore(waterHeight); waterInfo.JoinWaterShoreSegment(waterShoreSegment); waterShoreList.Add(waterInfo); } } bool hasJoinSuccess = false; for (int i = 0; i < waterShoreList.Count; ++i) { //之所以j从0开始,因为A连接B失败,但是B连接A有可能成功,可以优化连接函数 for (int j = 0; j < waterShoreList.Count; ++j) { if (i == j) { continue; } WaterShore waterShoreA = waterShoreList [i]; WaterShore waterShoreB = waterShoreList [j]; //可以为每一个WaterInfo设定唯一表示,并且拼接WaterLine后ID改变,在这里缓存拼接失败的ID对 if (waterShoreA.JoinWaterShore(waterShoreB)) { hasJoinSuccess = true; waterShoreList.RemoveAt(j); break; } } //成功拼接后,waterInfos中的某一个数据已经无效,从新开始 if (hasJoinSuccess) { i = -1; hasJoinSuccess = false; } } Debug.Log("waterInfos.cout: " + waterShoreList.Count); for (int i = 0; i < waterShoreList.Count; ++i) { waterShoreList [i].CheckError(); } return(waterShoreList); }