最近在做一个正六边形的游戏,被一开始的布局难倒了。
需求:中心有个正六边形,输入围绕中心扩散的环数,自动创建和摆放。

大概就是这样的吧,我觉得这个非常轻松的就可以搞定了。啊~~~~~啊~~~ 五环~~,你比四环多一环,啊~~~~啊~~~五环~~,你比六环少一环~~~
可是,到底每环要放多少个六边形?经过我缜密的观察发现一个规律。

如果假设第一个环编号为1,那么每个换六边形的数量就是 环数*6。啊~~~~~啊~~~ 五环~~,一环就是紫~禁~城~~~~。
可是摆放的具体位置是哪里?既然是圆形,那就需要知道 角度 和 半径 就可以依据圆形坐标公式算出来了。
二维圆上的点坐标公式:
X = Mathf.Sin(角度*Mathf.PI/180) * 半径
Y = Mathf.Cos(角度*Mathf.PI/180) * 半径
有人可能问,上面写的公式原理是啥?哈~哈~哈~~~~

啊~~~~~啊~~~ 五环~~,你比四环多一环,啊~~~~啊~~~五环~~~~~~
参见:已知圆心,半径,角度,求圆上的点坐标 - - 博客频道 - youkuaiyun.com
-----半径是啥?
紧密摆放的话,半径就是六边形的宽度。而每一环的半径就是环数*第一个半径。

好了这个可以大概构建一个循环体了。
=========下面搭建循环体============
1 Int RoundMax = 10;//最大环数变量 2 3 float Radius = 1f;//六边形最短宽度 4 5 for(int round = 1;round<=RoundMax;round++)//每一层环的循环体 6 7 { 8 9 for(环上每个六边形循环体) 10 11 12 Vector2 = new Vector2(Mathf.Sin(角度*Mathf.PI/180) * Radius * round, Mathf.Cos(角度*Mathf.PI/180) * Radius * round); 13 14 } 15 16 }
===============
那么角度又是多少?
360 ÷ 每一环的总数 = 间隔的角度
间隔的角度 × 当前序号 = 当前角度
=========下面添加每一环的计算程序============
1 Int RoundMax = 10;//最大环数变量 2 3 float Radius = 1f;//六边形最短宽度 4 5 for(int round = 1;round<=RoundMax;round++)//每一层环的循环体 6 7 { 8 9 for(int id = 0; id<=round*6; id++)//当前环的总个数 = round*6 10 11 {

该博客介绍了如何在Unity3D中实现从中心点开始,根据输入环数自动创建并排列正六边形的算法。通过计算每个环的六边形数量和角度,结合圆形坐标公式确定位置。虽然初步实现了紧密分布,但作者发现非特定角度的六边形并非正圆分布,需要进一步调整以达到理想效果。
最低0.47元/天 解锁文章
4231

被折叠的 条评论
为什么被折叠?



