HexMap六边形地图制作(1)

这个六边形地图制作教程真的是太好啦!

HexMap

前言

相信不少同学玩《文明5》都遇到过“就再来一回合”结果天亮了这种情况,文明这类游戏让人废寝忘食的魔力不仅在回合间的决策和勾心斗角,也在其出色的美术风格和独具特色的六边形战旗地图。

前段时间看到了HexMap学习笔记(一)——创建六边形网格这篇翻译文章,发现作者实现了类似文明系列的六边形地图,其教程中步骤和思路特别详细,最后效果也十分棒,遂决定跟随教程进行学习和实现。

当然这并不意味着uLab停更你信我

我会努力学习这一系列教程,并将其转化为自己的知识记录下来。

感谢Catlike Coding的Jasper Flick大佬,教程地址:HexMap

HexMap基础知识

使用六边形首先需要一个网格(Mesh),一般来讲先创建一个正方形的Mesh再修改成六边形。但正方形和六边形的特性不太相同:边数不同导致相邻的图形数量不同。见下图,正方形的相邻图形有8个(包含斜对角4个和水平垂直4个),而与相邻图形的距离也不同,如果边长为1,那么水平垂直相邻的距离是1,但对角距离为$ \sqrt{2} $。

正方形

这就可能导致一个问题:如何对待对角线运动?即在长度单位不同的情况下如何衡量对角线的运动?一种解决方法就是干脆不用正方形网格,改用六边形网格。

六边形网格示意图如下所示,一个六边形有六个临近图形,且与其距离相等,若边长为1,距离也为1,并且所有相邻图形都是边缘相邻,这使得我们处理一些数据十分方便。

六边形

接下来需要讨论具体的内外径数据,这方面内容可以参考百度百科上正六边形相关页面。若六边形边长为1,则六边形的半高(即内径)为$ \frac{\sqrt{3}}{2} $。

六边形内外径

教程在Unity中定义了一个结构体HexMetrics,设定外径outerRadius为10,内径innerRadius为$ 5\sqrt{3} $。

Daachun wechat
请给我钱ヾ(•ω•`)o