Unity3D 正六边形,环状扩散,紧密分布,的程序

【OpenGL】Shader实例分析(八)- 彩色光圈 研究了一个彩色光圈效果,感觉挺不错的,分享给大家,效果如下: 阅读详情


最近在做一个正六边形的游戏,被一开始的布局难倒了。

需求:中心有个正六边形,输入围绕中心扩散的环数,自动创建和摆放。

大概就是这样的吧,我觉得这个非常轻松的就可以搞定了。啊~~~~~啊~~~ 五环~~,你比四环多一环,啊~~~~啊~~~五环~~,你比六环少一环~~~

可是,到底每环要放多少个六边形?经过我缜密的观察发现一个规律。

如果假设第一个环编号为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 {
12 
13 Vector2 Pos= new Vector2(
14 
15 Mathf.Sin(360/(round*6)*id*Mathf.PI/180) * Radius * round,
16 
17 Mathf.Cos(360/(round*6)*id*Mathf.PI/180) * Radius * round
18 
19 );
20 
21 }
22 
23 }

 

=======下面转为三维向量========


 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 {
12 
13 Vector3 Pos= new Vector3(
14 
15 Mathf.Sin(360/(round*6)*id*Mathf.PI/180) * Radius * round,
16 
17 0,
18 
19 Mathf.Cos(360/(round*6)*id*Mathf.PI/180) * Radius * round
20 
21 );
22 
23 }
24 
25 }

 


=====距离胜利还有一步 下面引入模型和创建========

 1 GameObject Zero_OBJ;//六边形物体
 2 
 3 Int RoundMax = 10;//最大环数变量
 4 
 5 float Radius = 1f;//六边形最短宽度
 6 
 7 for(int round = 1;round<=RoundMax;round++)//每一层环的循环体
 8 
 9 {
10 
11 for(int id = 0; id<=round*6; id++)//当前环的总个数 = round*6
12 
13 {
14 
15 Vector3 Pos= new Vector3(
16 
17 Mathf.Sin(360/(round*6)*id*Mathf.PI/180) * Radius * round + ,
18 
19 0,
20 
21 Mathf.Cos(360/(round*6)*id*Mathf.PI/180) * Radius * round
22 
23 );
24 
25 Instantiate(Zero_OBJ,
26 
27 Zero_OBJ.transform.position.+ Pos ,//依据物体坐标偏移
28 
29 Quaternion.identity);
30 
31 }
32 
33 }

 

=======哈哈哈 我是在佩服我的智慧========


天空飘来五个字 那都不是事


运行结果


我去~~~真圆~~~~~


接下的十几分钟...


=================然后开始奋发图强的思考=============

其实还是有几个摆放正确的六边形

也就是说除了这0 , 60,120 , 180 , 240 , 300 角度的六边形,其余六边形其实不是正圆分布,而是直线分布。

如果是直线分布,就需要依据两点的坐标计算出排列的矢量方向,然后依据半径摆放就可以了。


=====接下吧正确位置写入 Pos_6[]========

 1 GameObject Zero_OBJ;//六边形物体
 2 
 3 Int RoundMax = 10;//最大环数变量
 4 
 5 float Radius = 1f;//六边形最短宽度
 6 
 7 for(int round = 1;round<=RoundMax;round++)//每一层环的循环体
 8 
 9 {
10 
11 int [] Pos_6 = new int[6];//记录正确6个位置的数组
12 
13 for(int id = 0; id<= 6; id++)//当前环的总个数 = round*6
14 
15 {
16 
17 Vector3 Pos_6[i]= new Vector3(
18 
19 Mathf.Sin(360/(round*6)*id*Mathf.PI/180) * Radius * round + ,
20 
21 0,
22 
23 Mathf.Cos(360/(round*6)*id*Mathf.PI/180) * Radius * round
24 
25 );
26 
27 Instantiate(Zero_OBJ,
28 
29 Zero_OBJ.transform.position.+ Pos_6[i] ,//依据物体坐标偏移
30 
31 Quaternion.identity);
32 
33 }
34 
35 
36 }

 

中间的六边形个数规律是:

每个六边形偏移距离是:


=======接下来插入之间的六边形========


 1 GameObject Zero_OBJ;//六边形物体
 2 
 3 Int RoundMax = 10;//最大环数变量
 4 
 5 float Radius = 1f;//六边形最短宽度
 6 
 7 for(int round = 1;round<=RoundMax;round++)//每一层环的循环体
 8 
 9 {
10 
11 int [] Pos_6 = new int[6];//记录正确6个位置的数组
12 
13 for(int id = 0; id<= 6; id++)
14 
15 {
16 
17 Vector3 Pos_6[i]= new Vector3(
18 
19 Mathf.Sin(360/(round*6)*id*Mathf.PI/180) * Radius * round + ,
20 
21 0,
22 
23 Mathf.Cos(360/(round*6)*id*Mathf.PI/180) * Radius * round
24 
25 );
26 
27 Instantiate(Zero_OBJ,
28 
29 Zero_OBJ.transform.position+ Pos_6[i] ,//依据物体坐标偏移
30 
31 Quaternion.identity);
32 
33 }
34 
35 
36 if(round >1)//第2圈开始执行插入
37 
38 {
39 
40 for(int id = 0; id<= 6; id++)//逐个区间插入
41 
42 {
43 
44 int NextID =( id+1)%6;//获取下一个位置ID,在0~5中循环取值
45 
46 
47 Vector3 Orientation = Vector3.Normalize(Pos_6[id],Pos_6[NextID])//单位朝向(当前点,上一个点)
48 
49 
50 for(int add = 0;add<round-1;add++)//循环插入
51 
52 {
53 
54 //----------插入点 = 单位方向*当前偏移距离+起点偏移
55 
56 Vector3 Now_Pos =
57 
58 Orientation
59 
60 *(Radius * add)
61 
62 +( Pos_6[id] + Zero_OBJ.transform.position);
63 
64 //-------------------------------------------------------------
65 
66 Instantiate(Zero_OBJ,Now_Pos,Quaternion.identity);
67 
68 
69 }
70 
71 
72 }
73 
74 }
75 
76 }

 

========运行结果===========

 
作者:CRomputer-罗军
链接:https://zhuanlan.zhihu.com/p/25243438
来源:知乎
用unity制作向外扩散的圆弧 创建向外扩散的圆弧 话不多说,先放上效果图 接下来阐述一下思路 圆弧要向外扩散 半径线性增大 角度线性增大 算得新cube的坐标,在3d坐标系中,取两个坐标作为平面坐标即可。 半径和角度的线性增大很好处理,循环同时给个增量即可 新cube的坐标需要通过计算 但实际上也很好想,就是计算出 1. x的增量 2. y的增量 其中: x的增量为半径乘上变化角度余弦值 y的增量为半径乘上变化... 阅读详情

相关推荐

Unity 创建一个蜂窝状的图形

做一款基于六边形界面的游戏,地图由很多个六边形组成,每一条边分别是一个GameObject,代码如下 //定义基本长度,该长度为六边形中点到每一条边的二分之一 private float baseDistance = 0.35f; private GameObject[] wall = new GameObject[500]; private int wallNum; private float

wanhaofu的博客 1463

很酷的angular圆圈向外扩散动画

下载地址 很酷的angular圆圈向外扩散动画,可以作为警示等网页特效。 dd:

ICode联盟 509

Unity Shader Graph 2D - Procedural程序化图形转动的环状六边形

Hexagon又称六边形,在游戏中是十分常见的基础形状,本文将使用程序化的六边形来制作多个环状六边形叠加的转动动画效果,实践Unity Shader Graph中的常用节点功能。

Giver的博客 1928

Unity的圆形水波进度动画效果

Unity的圆形水波进度动画效果shader实现_unity圆环-Unity3D文档类资源-优快云下载

waterdsm的博客 3567

六边形/六方向网格寻路类与使用示例(A星)

基于ghostcat工具类的AStar算法改编而成,非6方向的网格寻路也可以使用; 专用于六边形/六方向寻路,使用时请注意不要与原本的4/8方向方法混淆; 地图为二维数组,示例为生成的地图为左右交错、简单直观的展示了基本使用方法,可随实际使用自行修改; 工程文件由FD打开,无FD可直接使用文件夹内的类文件。 注: 可执行的demo:“bin\demo.swf” 寻路方法类:“lib\AStar\ghostcat\algorithm\traversal\AStar.as” 使用示例类:“src\Main.as”

DFX从芯片到系统:可制造性、可测试性与可靠性设计实战指南

DFX(Design for eXcellence)是一套面向产品全生命周期的设计方法论,涵盖可制造性(DFM)、可测试性(DFT)、可靠性(DFR)等维度。其核心原理是将制造、测试、维护等环节的约束前置到设计阶段,从而降低流片与量产风险。在芯片与系统硬件领域,DFX不仅是提升良率与测试效率的关键手段,更是保障车规、工控等严苛场景下长期稳定运行的基础。从芯片物理实现到PCB布局,再到系统级散热与维护设计,DFX的落地需要工具链、流程闸门与跨部门协作的体系化支撑。本文基于实际项目经验,分享DFX从设计决策到工

weixin_32349093的博客 348

Unity Shader圆环扩散效果

之前项目遇到圆环扩散效果的需求,本来动画想用AE来做。考虑到后期项目维护的方便,我决定用shader做。 先来看看最终效果: 其实就是画2个圆,1个圆环。因为两个圆有重叠,所以我将最小的圆alpha设为0,方便理解。得到的图如下: 最小的圆alpha设为1。另外一个圆为了实现从圆心往外alpha原来越大的效果,我们设置一个fixed的变量dis,储存该点距离圆心的距离,并将其赋...

u013140782的博客 1万+

MT5交易软件系统源码

Manager配置的功能及权限:管理客户、开户,销户、入金、信用额度、修改定单、人工交易报表、设定点差、强制平仓、修改密码,设定持仓交割单或挂单小止盈止损点数;26、修改价格 27、更改K线图历史价格 28、同步历史数据;2、系统设置 3、交易管理 4、交易柜台 5、价格更改 6、多台服。务器联机 7、恢复交易历史 8、数据源调整 9、备份服务调整 10、交易市场设定 11、交易单更改 12、平台时间设定(全世界) 13、可添加商品;15、设置商品利息;独立主机(服务器、VPS、VM)

tutujunjun的博客 904

unity Shader ASE 圆环扩散

unity Shader ASE 圆环扩散

qq_38062606的博客 1946

计算机组成原理 微程序控制器实验

微程序控制器实验 实验环境 计算机组成原理实验环境 实验目的 掌握微程序控制器的组成原理和工作过程。 理解微指令和微程序的概念,理解微指令与指令的区别与联系。 掌握指令操作码与控制存储器中微程序的对应方法。熟悉根据指令操作码从控制存储器中读出微程序的过程。 实验要求 做好实验预习,读懂实验电路图,熟悉实验元器件的功能特性和使用方法。 按照实验内容与步骤的要求,独立思考,认真仔细地完成实验。 写出实验报告。 实验电路        

Long_UP的博客 7万+

K210开发板学习笔记(三)——STM32+K210+SD卡实现人脸识别(完整K210代码)

更新日记:2022年4月26日 更新了串口通信部分的内容,本文写的略为粗糙,恐有不当之处,希望大家不吝赐教。 人脸识别 一、MaixPy IDE开发 参考博主晨少hc的博文(https://blog.youkuaiyun.com/HuangChen666/article/details/113995079)来实现人脸识别功能,我用的硬件是亚博智能的K210开发板,在配置工程中有几步和这个博主的不一样,需要注意。 所需要的文件有:模型文件),脚本文件,ide需要的bin文件...

Embedded learner的博客 4万+

oracle一列多行转一行多列表示,Oracle 多行转多列,列值转为列名

前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容;之后需要导出问卷明细,,,,麻烦来咯于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人然后最终自己写出来了,decode才是核心废话不多说,看图需求示例图表:存储过程,嘿嘿:create or replace procedure NAG_QUESTIONERSULT_EXP(V_QID in number,C_...

weixin_42531516的博客 2405

单相PWM整流器的数学模型、工作原理

单相PWM整流器的数学模型、工作原理

weixin_58670090的博客 1万+

Unity3D移动平台动态读取外部文件全解析

前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨。眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑和手指了。那么今天开始,小匹夫会记录一些平时工作中遇到的坑,以及小匹夫的应对方法,欢迎各位拍砖讨论。那么今天主要讨论一下Unity3D在移动端如何动态的读取外部文件,比如csv(txt),xml一类...

weixin_33860147的博客 910

手把手教你用QEMU虚拟化华为路由器固件(附完整网络配置指南)

本文提供了一份详尽的QEMU虚拟化华为路由器固件的实战指南。从固件解包、网络桥接配置到QEMU虚拟机启动,手把手教你搭建完整的嵌入式设备沙箱环境,特别适合安全研究、逆向分析和学习嵌入式系统工作原理。

tgb3456789的博客 937

SQL注入:联合查询的三个绕过技巧

在SQL注入中,可以利用科学计数法来绕过对输入的限制。例如,可以使用科学计数法来绕过对字符串长度的限制,通过将字符串拆分成多个部分并使用科学计数法来表示。此外,还可以利用数据库的特定特性或语法来替代原始的查询语句,从而执行联合查询或其他恶意操作。另外,还可以尝试利用无列名注入的技巧,通过在原始查询中使用通配符或其他方式来绕过对列名的限制,从而执行恶意操作。

qq_68163788的博客 3792

六边形网格+寻路

六边形 寻路

木之子南 3724

Unreal5从入门到精通之如何录制360°VR全景视频

摘要:本文详细介绍了使用虚幻引擎(UE)生成360°全景视频的完整流程。首先需启用MovieRender Queue和Panoramic Capture插件,准备场景并设置相机序列。通过影片渲染队列选择8K分辨率输出PNG序列帧,利用ffmpeg工具转换为MP4格式,最终获得高精度全景视频。该方法适用于VR内容开发,能以较低性能消耗实现影院级画质,特别适合冥想类应用场景。教程涵盖从插件配置到后期合成的全链路操作,为开发者提供高效的全景内容生产解决方案。(150字)

TxNet 1401

Unity中shader实现绘制六边形网格

上一篇 绘制一个正六边形的shader 中实现了在面片上绘制单一的六边形。结合上上篇的六边形网格向量工具,可以创建大量的六边形来实现绘制一个六边形网格。然而这样的绘制问题很明显,顶点数较多,每一个六边形用掉4个顶点。。。那我为什么不去直接用6个顶点的mesh呢?(手动滑稽)。 试想一下如果我有10000个格子,就要为了它绘制40000个顶点。。。 还有一种很常用的方式,画出一张六边形的贴图,然后

叫我上上的博客 6849

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Unity UI.Image 六边形+流光 Shader

【代码】Unity UI.Image 六边形+流光 Shader。

chooselove的博客 1622

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【Unity】【UGUI】实现围绕一个点的环形布局

前言 最近需要做一个需求,是让 一堆UI控件围城一个圈。大概效果如下图所示: 之前做布局大多是按照方格排成几排,围成一个圈的貌似原生的组件里没有。所以需要自己实现一个,好在不算太难。具体思路很简单:就是设定半径、开始角度、间隔角度以及各个子对象的大小,然后用代码让他们像上图那样摆成一个圈就好了。 正文 1、获取子对象 首先第一步就是要获取子对象,这里要注意的是,不是所有的子对象...

魔术师Dix的博客 6887

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Unity】六边形地图格子基础

这里的六边形地图,指SLG游戏中的大世界地图,用六边形的网格进行平铺。例如文明,以及部分SLG手游。 这里介绍六边形地图格子的基本概念,以及具体数学实现代码。

魔术师Dix的博客 1万+

《愤怒的小鸟》弹弓实现

using UnityEngine; using System.Collections; public class Ball : MonoBehaviour { private Vector3 MousePosition; private LineRenderer leftLine; private LineRenderer rightLine; void S

赖张殷-Eagle 1976
上一篇: UGUI研究院之UI的深度学习(二)
下一篇: 如何用unity3d实现发送带附件的邮件
AdvancePikachu
博客等级 码龄10年 10粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值