从零开始ming的多人联机游戏--游戏客户端(1)六边形地图
打算做的小游戏是一个多人联机的策略类游戏,类似于《文明》那种
游戏的玩法并不确定,开这个坑主要是为了入门后端开发,顺便熟悉下游戏开发
这篇文章使用unity,实现了六边形单元地图的创建。后续的游戏都在这种地图的基础上实现。
实现方法是现成的:https://catlikecoding.com/unity/tutorials/hex-map/part-1/
这篇文章写的非常好,就是有一点不好,文中的代码都是一段一段放出来的,想要完成一定要仔细看完文章,另外一些不熟悉unity的朋友可能有的操作不清楚。
这里我补充一些细节,另外把我实现的完整的unity工程分享出来
------------------------------------------------------------------------------------------------------------------------
关于六边形地图的好处,我再搬运下吧


方形网格地图中一个单元和它的八个邻近单元之间的距离是不同的,所以在策略游戏中会比较不公平(如果地图是由单元格组成的话)
但是六边形单元格组成的地图,中心单元格和邻近单元格距离都是相同的
------------------------------------------------------------------------------------------------------------------------
每个脚本的功能
HexMetrics.cs:六边形外切圆和内接圆的半径,六个顶点相对于中心的坐标都在HexMetrics.cs中定义
HexCoordinates.cs:六边形单元在六边形地图中的坐标,(x,y,z)分别对应六边形三个对边所在的方向,而不是在unity原本的空间坐标系中的坐标
HexCell.cs:六边形预制体Hex Cell加载的脚本,最终生成的地图中每一个单元格都是HexCell的复制,HexCell中保存了单元格的坐标和单元格颜色
HexMesh.cs:对六边形进行三角剖分,并渲染六边形表面
HexGrid.cs:生成六边形地图的脚本,Awake()中创建画布和六边形单元格,每创建一个单元格同时创建一个text用于显示单元格坐标
update()中不断检查鼠标是否点击到了某个单元格,如果点击,则把该单元格颜色改为粉色
HexCoordinatesDrawer.cs:定义了在unity的object检查器面板中显示单元格坐标的方法
------------------------------------------------------------------------------------------------------------------------
几个需要注意的细节

工程中的几个object都需要做成预制体,把object拖到Assets中即可变为预制体如上图中的蓝色object

Hex Grid中的脚本这里,记得把Hex Cell Label和Hex Cell 勾选上

HexMesh的网格渲染器中元素的材质记得换成我们预先新建的,在assets文件夹下可以创建,创建材质后为材质添加着色器,着色器也要在assets中新建,当然这些在工程中都我都已经做好了。
------------------------------------------------------------------------------------------------------------------------

最后的效果如上图所示,点击单元格可以为其着色
我建好的工程和代码:https://github.com/isyiming/client
unity2019.2.19f1 macos
从零开始ming的多人联机游戏--游戏客户端(1)六边形地图的更多相关文章
- 从零开始ming的多人联机游戏(3)为socket通讯添加mysql数据库
macOS下visual studio C#加载mySql 本文在上一节的基础上,添加了mysql数据库的功能.client发送信息给服务器后,服务器将收到的消息保存在数据库中. 如果client发送 ...
- WP老杨解迷:如何营造让人花钱的游戏
游戏是最好做也是最不好做的项目,游戏的好坏现在都是直接从数据来说话,Windows Phone的游戏应用同样不可能逃出这个行业准则,要说在市场里做的好,那就直接拿数据来说,几乎没人会去在乎游戏到底传达 ...
- day23 02 组合(继续人狗大战游戏)
day23 02 组合(继续人狗大战游戏) 面向对象的三大特性:继承 多态 封装 先讲解一下组合 组合:一个对象的属性值是另一个类的对象:对象.属性.属性(一般有两个点) 继续扩展day22 01里面 ...
- 如何构建一个多人(.io) Web 游戏,第 2 部分
原文:How to Build a Multiplayer (.io) Web Game, Part 2 探索 .io 游戏背后的后端服务器. 上篇:如何构建一个多人(.io) Web 游戏,第 1 ...
- Golang+Protobuf+PixieJS 开发 Web 多人在线射击游戏(原创翻译)
简介 Superstellar 是一款开源的多人 Web 太空游戏,非常适合入门 Golang 游戏服务器开发. 规则很简单:摧毁移动的物体,不要被其他玩家和小行星杀死.你拥有两种资源 - 生命值(h ...
- JS开发HTML5游戏《神奇的六边形》(一)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- JS开发HTML5游戏《神奇的六边形》(二)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- JS开发HTML5游戏《神奇的六边形》(四)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- JS开发HTML5游戏《神奇的六边形》(三)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
随机推荐
- dotnet core 黑科技·String
本文来告诉大家 dotnet core 里面使用的黑科技,如何提高String.IndexOf(char)的性能 在Performance Improvements in .NET Core有说道哪些 ...
- CSS3 属性学习
fill-available表示撑满可用空间(包括高度,宽度)[此处包括padding和margin会尽可能的撑满,只对于行内块(inline-block)和块元素(block)起作用,webkit内 ...
- remote api
iperf -B 99.99.3.1 -c 192.168.42.242 -p 10002 -f m -i 1 -P 1 -w 1M -u -b 1M -t 20 iperf -B 192.168.4 ...
- Pandas处理缺失数据
利用pandas.DataFrame.dropna处理含有缺失值的数据 1.使用形式: DataFrame.dropna(axis=0, how='any', thresh=None, subset= ...
- 第二阶段:4.商业需求文档MRD:5.PRD-原型图
页面原型图!
- golang实现依赖注入
golang实现依赖注入 依赖注入是软件工程中经常使用到的一种技术,它提供了一种控制反转的机制,把控制权利交给了调用方.调用方来决定使用哪些参数,哪些对象来进行具体的业务逻辑. 它有几个好处: 1 它 ...
- kotlin + springboot 整合redis,Redis工具类编写及单元测试
参考自: https://www.cnblogs.com/zeng1994/p/03303c805731afc9aa9c60dbbd32a323.html 1.maven依赖 <?xml ve ...
- JVM性能监测工具——VisualVM
Java本身自带了有好几个jvm监测工具,其中jconsole和jvisualvm这两个工具具有图形化界面,可以监测到cpu.类.线程.堆等一些参数,而且具有远程监控的能力. 启动:打开cmd命令窗口 ...
- 洛谷P1147 连续自然数和 题解 枚举
题目链接:https://www.luogu.com.cn/problem/P1147 题目大意: 给你一个数 \(M\) ,求有多少对连续自然数对之和为 \(M\),输出这列连续自然数对的首项和末项 ...
- Redis-NoSQL入门和概述(一)
NoSQL简史及定义 NoSQL 这个术语最早是在 1998 年被Carlo Strozzi命名在他的轻量的,开源的关系型数据库上的,但是该数据库没有提供标准的SQL接口:在2009 年再次被Eric ...