unity 地图画格_[蛮牛译馆]UnityC#教程—六边形地图系列之创建网格(中)
原标题:[蛮牛译馆]UnityC#教程—六边形地图系列之创建网格(中)
书接上回
3. 渲染六边形
单元格都正确摆放了,我们可以开始着手陈列真正的六边形了。我们首先必须摆脱那些plane,所以从单元格prefab里移除除HexCell外的所有组件。
就像Mesh Basics教程中一样,我们使用一个简单的mesh来渲染整个网格。不过,这次我们不会预先决定有多少个顶点和三角形。取而代之,我们使用列表。
创建一个新的HexMesh组件来管理我们的mesh。它需要一个mesh过滤器和渲染器,有一个mesh,并有存有其顶点和三角形的列表。
为我们的网格创建一个带有该组件的字物体对象。它将自动获取一个mesh渲染器,但不会被分配材质。所以添加一个默认材质。
HexGrid如何找回它的hexmesh,就同它找到自己的画布一样。
网格被唤醒后,必须高速mesh来三角化它的单元格。我们必须事先确定hex mesh组件也已经被唤醒。犹豫Start稍后会被唤醒,所以写在它里面。
这个HexMesh.Triangulate方法将可在任何时刻被调用,甚至当单元格已经被三角化后。所以我们应该清理旧数据。然后在所有单元格循环,分别将其三角化。这之后,将产生的顶点和三角形注册到mesh中,以重新计算mesh发现来结束。
由于六边形是有三角形构成的,让我们创建一个简便的方法来添加一个三角形,给予三个顶点坐标。它简单地按顺序加上了顶点,同时还添加了这些顶点的指数来组成一个三角形。第一个顶点的指数等于定点列表在加入新顶点前的长度。所以在添加前记下它。
现在我们可以三角化单元格了。先从第一个三角形着手。它的第一个顶点是六边形的中心。另两个顶点是第一和第二个叫,与其中心关联。
成功了,那么循环六个三角形。
不能共享顶点吗?
不幸的是,产生了一个IndexOutOfRangeException。这是由于最后一个三角形试着去取第七个角,那个不存在的角。当然,它应该回卷去使用第一个角。或者,我们可以在HexMetrics.corners中复制第一个角,那样我们就不需要担心这个问题了。
六边形的坐标
再在六边形网格环境下看看单元格坐标。Z坐标显示正常,但是X坐标是曲折的。这是一种使我们的行偏移来覆盖矩形区域的副作用。
这些偏移坐标在与六边形相关时并不好处理。添加一个HexCoordinates结构,我们可以用它来转换成一个不同的坐标系统。将其序列化以使Unity能够储存它,从而允许他们在play mode中存活。同样,使用public只读属性使它们不可变。
添加一个静态方法来创建一系列使用常规便宜坐标的坐标。就现在,先逐字复制这些坐标好了。
同样添加方便的字符串转换方法。默认ToString方法会返回结构类型名,并不实用。覆写并在一行里返回坐标。同时添加一个方法来将不同坐标置于不同的行,因为我们已经在使用这样一种布局了。
现在我们可以为我们的HexCell组件添加一系列的坐标了。
矫正HexGrid.CreateCel来使它从新坐标中受益。
现在来解决X坐标的问题,使它们沿一条直的轴对齐。我们可以通过取消水平位移来做到。结果就是典型的轴向坐标。
这个二维坐标系统然我们用四个方向来描述运动和偏移。尽管如此,剩下的两个方向还需特殊处理。这显示出还有第三个维度。确实,如果我们水平翻转X唯独,我们就得到了消失的Y维度。
由于X和Y维度互为镜像,Z维度恒定的情况下一起添加它们的坐标总会产生相同的结果。事实上,如果你一起添加三个维度的坐标将会得到0。如果增加一个坐标,你将必须增加另一个。确实,这产生了6个可能的运动方向。这些坐标是立方体坐标,有由于它们是三维的,且拓扑学上也像一个立方体。
由于所有坐标叠加后为零,你总是可以通过另两维坐标导出剩下的一个由于我们总是存储X和Z坐标,那么我们就不需要再存储Y坐标了。我们可以囊括一个使用字符串方法能够将其推导出的属性。
监视器里的坐标
在play mode选中一个单元格。由于它显示,inspector不会显示它的坐标。只有HexCell.coordinates的前端标签被展示。
不过这不太重要,只是在坐标被显示时会显得更整齐。Unity通常不显示坐标是因为它们没被标记为序列化域。实现它,我们必须为X和Z明确定义序列化域。
X和Z坐标现在已被显示了,但是它们是可编辑的,而这是我们不需要的,因为坐标应该恒定。而且它们重叠着显示也是不太美观的。
我们可以通过为HexCoordinates类定义一个自定义属性来更好实现。创建一个HexCoordinatesDrawer脚本,将其置于Editor文件夹内作为仅供编辑器使用的脚本。
此类应该继承UnityEditor.PropertyDrawer并且需要UnityEditor.CustomPropertyDrawer属性来使它与正确的类关联。
Propertydrawer通过OnGUI方法渲染它们的内容。这一方法用提供屏幕矩形区域绘制,序列化数据和它属于的区域的标签。
从属性中提取x和z值并使用它们新的一系列的坐标。然后在特定位置绘制GUI标签,使用我们的HexCoordinates.ToString方法。
这显示了我们的坐标,但是现在字段名字不见了。这些名字通常由EditorGUI.PrefixLabel方法绘制。作为附加,它会返回一个与调整后的矩形,它与标签右侧对齐。
拓展阅读: UnityC#教程—六边形地图系列之创建网格(上)返回搜狐,查看更多
责任编辑:
unity 地图画格_[蛮牛译馆]UnityC#教程—六边形地图系列之创建网格(中)相关推荐
- unity 地图画格_unity游戏地形网格地图编辑生成插件Terrain Grid System v10.7
地形网格系统是一个先进的网格编辑生成器 ,具有强大的地形和二维网格编辑创建功能. 如果你想创建一个战略游戏或RTS游戏,想快速突出显示一些单位下的单元格或显示在控制下的领土, 或者你想让玩家在地形上选 ...
- unity 地图画格_Unity2D 四边形与六边形网格地图寻路 [新手]
毕业几年了, 每天用世界上最好的语言写crud, 有时也挺无聊.最近心血来潮稍微研究了一下Unity, 发现十分有趣, 很适合当作码农的日常休闲娱乐活动. 想象一下,要先做一个游戏,当然得先画个地图, ...
- rj45带滤波器20/05的数字是什么意思_「手机维修自学教程」认识手机射频电路中的滤波器 维修技巧分析...
今天跟大家聊聊手机中的滤波器. 昨天放了一个话题给大家交流,射频电路中的滤波器短接问题?有不少朋友也在下面留言了.滤波器何须神圣?有什么作用呢?维修中如何处理呢? 我们先来普及一下滤波器的概念. 滤波 ...
- 招商证券股票最低卖出价格计算器 | averiany涂鸦馆
招商证券股票最低卖出价格计算器 | averiany涂鸦馆 招商证券股票最低卖出价格计算器 | averiany涂鸦馆 posted on 2013-11-29 17:27 lexus 阅读( .. ...
- ue4 离线渲染_[译]Real Shading in Unreal Engine 4(UE4中的真实渲染)(2)
利用假期接着把剩下的部分搞完吧,其实,纯粹的翻译应该还是比较简单的,但是,为了更好地理解,我一般都会多找一些资料来进行互相印证.在上面一部分Shader Model的改变过程中,我主要是参考了一些PB ...
- npoi获取合并单元格_梦琪小生 C# 如何使用NPOI操作Excel以及读取合并单元格等
C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...
- unity 自定义时间轴_如何创建自定义时间轴标记
unity 自定义时间轴 Starting with Unity 2019.1, Timeline supports markers! In this blog post, I will show y ...
- Unity 六边形地图系列(二十五) :水循环
原文地址:https://catlikecoding.com/unity/tutorials/hex-map/part-25/ 机翻+个人润色 显示原始地图数据 演化细胞气候 创建部分水循环模拟 这是 ...
- Unity 六边形地图系列(二十七) :循环地图
原文地址:https://catlikecoding.com/unity/tutorials/hex-map/part-27/ 机翻+个人润色 将地图分割成可以移动的列. 让地图对着相机居中. 循环地 ...
- 内存微粒_减少室内微粒空气污染的策略,第2部分中的第1部分
内存微粒 Residents of the West Coast have been experiencing a continuous onslaught of air pollution unli ...
最新文章
- 开发笔记7 | 部署 Go 应用程序到阿里云 ECS
- window7不要光盘修复计算机,Win7若崩溃了就靠它——Win7系统修复光盘制作方法解析...
- 实现GridView的插入功能
- FusionInsight LibrA V100R002C80SPC300安装指南
- linux ls in*,35 ls Command Examples in Linux (The Complete Guide)
- IT从业的迷思与破解之道(更新)
- MVC如何添加Model
- .Net中json序列化与反序列化
- hadoop设置用户权限_No.9 MySQL之用户管理与权限设置
- 学UI设计就业难吗?
- 欺诈与反欺诈的旷世攻防之战
- html引入layer.js,require.js引用jquery、layer的简单实例用法
- xxx系统的6大质量属性战术
- gcc CFLAGS中调试和优化标志
- smarq v7 智器 v7 新手使用
- jsp论文参考文献(2020最新)
- 推导多元最小二乘法的计算方法
- 重新审视自己,把握真实瞬间 _大前研一
- 解决高德地图api叠加Imagelayer播放雷达图闪烁
- Java基础巩固Day2作业
热门文章
- 通过poi读取ppt元素demo
- mysql增删改查sql语句_sql增删改查语句是什么?
- 微信怎么测试好友软件,三种方法教你检测微信中的僵尸粉!不要再用第三方软件了哦...
- 使用ColorUI组件
- 计算机课程设计红绿灯,labview红绿灯课程设计报告
- 数字图像处理 冈萨雷斯 第三版 书中配套图片下载地址
- c#餐饮系统打印机_C# 实现打印机功能
- jQuery WEUI
- android百度地图调用,Android 调用百度地图API
- 2022 数学建模B题成品论文 参考文章 含全部建模 步骤 数学模型 图像