原标题:[蛮牛译馆]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#教程—六边形地图系列之创建网格(中)相关推荐

  1. unity 地图画格_unity游戏地形网格地图编辑生成插件Terrain Grid System v10.7

    地形网格系统是一个先进的网格编辑生成器 ,具有强大的地形和二维网格编辑创建功能. 如果你想创建一个战略游戏或RTS游戏,想快速突出显示一些单位下的单元格或显示在控制下的领土, 或者你想让玩家在地形上选 ...

  2. unity 地图画格_Unity2D 四边形与六边形网格地图寻路 [新手]

    毕业几年了, 每天用世界上最好的语言写crud, 有时也挺无聊.最近心血来潮稍微研究了一下Unity, 发现十分有趣, 很适合当作码农的日常休闲娱乐活动. 想象一下,要先做一个游戏,当然得先画个地图, ...

  3. rj45带滤波器20/05的数字是什么意思_「手机维修自学教程」认识手机射频电路中的滤波器 维修技巧分析...

    今天跟大家聊聊手机中的滤波器. 昨天放了一个话题给大家交流,射频电路中的滤波器短接问题?有不少朋友也在下面留言了.滤波器何须神圣?有什么作用呢?维修中如何处理呢? 我们先来普及一下滤波器的概念. 滤波 ...

  4. 招商证券股票最低卖出价格计算器 | averiany涂鸦馆

    招商证券股票最低卖出价格计算器 | averiany涂鸦馆 招商证券股票最低卖出价格计算器 | averiany涂鸦馆 posted on 2013-11-29 17:27  lexus 阅读( .. ...

  5. ue4 离线渲染_[译]Real Shading in Unreal Engine 4(UE4中的真实渲染)(2)

    利用假期接着把剩下的部分搞完吧,其实,纯粹的翻译应该还是比较简单的,但是,为了更好地理解,我一般都会多找一些资料来进行互相印证.在上面一部分Shader Model的改变过程中,我主要是参考了一些PB ...

  6. npoi获取合并单元格_梦琪小生 C# 如何使用NPOI操作Excel以及读取合并单元格等

    C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...

  7. unity 自定义时间轴_如何创建自定义时间轴标记

    unity 自定义时间轴 Starting with Unity 2019.1, Timeline supports markers! In this blog post, I will show y ...

  8. Unity 六边形地图系列(二十五) :水循环

    原文地址:https://catlikecoding.com/unity/tutorials/hex-map/part-25/ 机翻+个人润色 显示原始地图数据 演化细胞气候 创建部分水循环模拟 这是 ...

  9. Unity 六边形地图系列(二十七) :循环地图

    原文地址:https://catlikecoding.com/unity/tutorials/hex-map/part-27/ 机翻+个人润色 将地图分割成可以移动的列. 让地图对着相机居中. 循环地 ...

  10. 内存微粒_减少室内微粒空气污染的策略,第2部分中的第1部分

    内存微粒 Residents of the West Coast have been experiencing a continuous onslaught of air pollution unli ...

最新文章

  1. 开发笔记7 | 部署 Go 应用程序到阿里云 ECS
  2. window7不要光盘修复计算机,Win7若崩溃了就靠它——Win7系统修复光盘制作方法解析...
  3. 实现GridView的插入功能
  4. FusionInsight LibrA V100R002C80SPC300安装指南
  5. linux ls in*,35 ls Command Examples in Linux (The Complete Guide)
  6. IT从业的迷思与破解之道(更新)
  7. MVC如何添加Model
  8. .Net中json序列化与反序列化
  9. hadoop设置用户权限_No.9 MySQL之用户管理与权限设置
  10. 学UI设计就业难吗?
  11. 欺诈与反欺诈的旷世攻防之战
  12. html引入layer.js,require.js引用jquery、layer的简单实例用法
  13. xxx系统的6大质量属性战术
  14. gcc CFLAGS中调试和优化标志
  15. smarq v7 智器 v7 新手使用
  16. jsp论文参考文献(2020最新)
  17. 推导多元最小二乘法的计算方法
  18. 重新审视自己,把握真实瞬间 _大前研一
  19. 解决高德地图api叠加Imagelayer播放雷达图闪烁
  20. Java基础巩固Day2作业

热门文章

  1. 通过poi读取ppt元素demo
  2. mysql增删改查sql语句_sql增删改查语句是什么?
  3. 微信怎么测试好友软件,三种方法教你检测微信中的僵尸粉!不要再用第三方软件了哦...
  4. 使用ColorUI组件
  5. 计算机课程设计红绿灯,labview红绿灯课程设计报告
  6. 数字图像处理 冈萨雷斯 第三版 书中配套图片下载地址
  7. c#餐饮系统打印机_C# 实现打印机功能
  8. jQuery WEUI
  9. android百度地图调用,Android 调用百度地图API
  10. 2022 数学建模B题成品论文 参考文章 含全部建模 步骤 数学模型 图像