1. 关于六边形
为什么使用六边形?如果你需要一个网格,似乎直接使用正方形较为合理。正方形易画、易地位,但它们也有不足。看看网格中的一个方格。然后再看看它的邻居们。
图片 2.png (135.79 KB, 下载次数: 66)
A square and its neighbors.
2016-10-13 00:04 上传
一共有八个邻居。其中四个可以通过四边到达。它们分别是水平和竖直的邻居。其它四个可以通过四角到达。它们是对角邻居。
网格两相邻部分中心间的是多少呢?如果边长为 1,那么对于水平和竖直邻居来说,结果为 1。而就对角邻居而言,结果为√2。
两种不同相邻类型结果的不同导致错杂。如果使用离散运动,你将如何处理对角运动呢?全部允许?你该怎样创建一个更为有机的状态呢?不同的游戏使用不同的手段,伴随不同的优势与劣势。手段之一就是完全不使用正方形,改为使用六边形。
图片 3.png (189.62 KB, 下载次数: 63)
A hexagon and its neighbors.
2016-10-13 00:05 上传
与正方形相比,一个六边形只有六个邻居,而不是八个。且所有邻居皆为临边邻居。并不存在角邻居。所以它只有一种相邻方式,那就会简化很多事。当然,一个六边形网格没有四边形网格那般容易构造,但我们能解决它。
开始前,我们必须选定六边形的大小。先让边长为10个单元。因为一个六边形包含了一个围成一圈的6个等边三角形,所以中心到任意一角的距离都同样是10。这也就定义了我们的六边形的外半径。
图片 4.png (219.89 KB, 下载次数: 71)
A hexagon's outer and inner radius.
2016-10-13 00:07 上传
同样还存在着一个内半径,那就是中心点到各边的距离。该值的度量是很重要的,因为相邻两六边形中心的距离为其两倍。内半径等于√3/2倍的外半径,在我们的例子中就等于5√3。让我们将其存入一个静态类以便访问。
[C#] 纯文本查看 复制代码usingUnityEngine;
publicstatic class HexMetrics {
public const float outerRadius = 10f;
public const float innerRadius =outerRadius * 0.866025404f;
}
怎样导出内半径?
再定义出与单元格中心相关的六个中心位置。注意,定位一个