5-6 代码优化 共享列表

  在上一章中,我们修复了地图编辑器的功能。虽然现在构建地图的方式有了比较大的变化,但HexMesh里的代码逻辑并没有改变,它只需要一个单元格数组就能干活,无论是一个还是多个mesh都没有关系。之前我们并没有考虑过使用多个mesh构建整个地图的方案,或许这里能有优化的地方。
  HexMesh里使用的列表实际是一个临时数据缓存,它只在三角构建的过程中使用。然而现在地图块的三角构建也是一次性完成的,所以还是只需要设置一次列表的数据而不是每个mesh三角构建时都设置一次,我们可以把列表设置为静态类型来实现这个改动。代码如下:

HexMesh.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class HexMesh : MonoBehaviour
{
//存储所有正六边形的顶点位置信息
//private List<Vector3> vertices;
private static List<Vector3> vertices = new List<Vector3>();

//索引,每个三角面片顶点的渲染顺序
//private List<int> triangles;
private static List<int> triangles = new List<int>();

//存储cell每个顶点的颜色信息
//private List<Color> colors;
private static List<Color> colors = new List<Color>();



private void Awake()
{


//初始化vertices、triangles链表 用于存储顶点和面片信息
//vertices = new List<Vector3>();
//triangles = new List<int>();

//初始化colors链表,用于存储顶点颜色信息
//colors = new List<Color>();
}
}

使用静态类型的列表会有很大的效率提升么?
这只是一个说明该如何使用列表的简单改动,虽然提升不大但值得这么去做,即使我们现在不用太过担心它的效率问题。
这样改动后效率会有些提升,因为列表共享以后所需要的内存分配要少上一些。当使用20乘20的地图块时,节省的内存差不多刚超过100MB。

  代码经过优化之后,在性能上有些许的提升。因为有了更大尺寸的地图,我们就的摄像机现在已经不能完全显示整个地图了,在接下来的章节中,我们将会增加对摄像机控制的功能,让它可以移动和旋转视角,方便我们在运行时编辑地图。

Github代码