打算做的小游戏是一个多人联机的策略类游戏,类似于《文明》那种

游戏的玩法并不确定,开这个坑主要是为了入门后端开发,顺便熟悉下游戏开发

这篇文章使用unity,实现了六边形单元地图的创建。后续的游戏都在这种地图的基础上实现。

实现方法是现成的:https://catlikecoding.com/unity/tutorials/hex-map/part-1/

这篇文章写的非常好,就是有一点不好,文中的代码都是一段一段放出来的,想要完成一定要仔细看完文章,另外一些不熟悉unity的朋友可能有的操作不清楚。

这里我补充一些细节,另外把我实现的完整的unity工程分享出来

------------------------------------------------------------------------------------------------------------------------

关于六边形地图的好处,我再搬运下吧

从零开始ming的多人联机游戏--游戏客户端(1)六边形地图-LMLPHP从零开始ming的多人联机游戏--游戏客户端(1)六边形地图-LMLPHP

方形网格地图中一个单元和它的八个邻近单元之间的距离是不同的,所以在策略游戏中会比较不公平(如果地图是由单元格组成的话)

但是六边形单元格组成的地图,中心单元格和邻近单元格距离都是相同的

------------------------------------------------------------------------------------------------------------------------

每个脚本的功能

HexMetrics.cs:六边形外切圆和内接圆的半径,六个顶点相对于中心的坐标都在HexMetrics.cs中定义

HexCoordinates.cs:六边形单元在六边形地图中的坐标,(x,y,z)分别对应六边形三个对边所在的方向,而不是在unity原本的空间坐标系中的坐标

HexCell.cs:六边形预制体Hex Cell加载的脚本,最终生成的地图中每一个单元格都是HexCell的复制,HexCell中保存了单元格的坐标和单元格颜色

HexMesh.cs:对六边形进行三角剖分,并渲染六边形表面

HexGrid.cs:生成六边形地图的脚本,Awake()中创建画布和六边形单元格,每创建一个单元格同时创建一个text用于显示单元格坐标

      update()中不断检查鼠标是否点击到了某个单元格,如果点击,则把该单元格颜色改为粉色

HexCoordinatesDrawer.cs:定义了在unity的object检查器面板中显示单元格坐标的方法

------------------------------------------------------------------------------------------------------------------------

几个需要注意的细节

从零开始ming的多人联机游戏--游戏客户端(1)六边形地图-LMLPHP

工程中的几个object都需要做成预制体,把object拖到Assets中即可变为预制体如上图中的蓝色object

从零开始ming的多人联机游戏--游戏客户端(1)六边形地图-LMLPHP

Hex Grid中的脚本这里,记得把Hex Cell Label和Hex Cell 勾选上

从零开始ming的多人联机游戏--游戏客户端(1)六边形地图-LMLPHP

HexMesh的网格渲染器中元素的材质记得换成我们预先新建的,在assets文件夹下可以创建,创建材质后为材质添加着色器,着色器也要在assets中新建,当然这些在工程中都我都已经做好了。

------------------------------------------------------------------------------------------------------------------------

从零开始ming的多人联机游戏--游戏客户端(1)六边形地图-LMLPHP

最后的效果如上图所示,点击单元格可以为其着色

我建好的工程和代码:https://github.com/isyiming/client

unity2019.2.19f1 macos

05-11 22:20