从零开始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)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
随机推荐
- The sixth day of Crawler learning
爬取我爱竞赛网的大量数据 首先获取每一种比赛信息的分类链接 def get_type_url(url): web_data = requests.get(web_url) soup = B ...
- DOCKER学习_006:Docker存储驱动
一 镜像的分层特性 在说docker的文件系统之前,我们需要先想清楚一个问题.我们知道docker的启动是依赖于image,docker在启动之前,需要先拉取image,然后启动.多个容器可以使用同一 ...
- 学习python库:elasticsearch-py
一.介绍 elasticsearch-py是一个官方提供的low-level的elasticsearch python客户端库.为什么说它是一个low-level的客户端库呢?因为它只是对elasti ...
- 从零开始のcocos2dx生活(三)Scheduler
文章目录 取模 Timer() 变量 设置定时器Timer() 一些成员函数 Scheduler() 变量 初始化 哈希表 构造函数schedule() 开启定时器Update() 析构函数~Upda ...
- 从头学pytorch(十二):模型保存和加载
模型读取和存储 总结下来,就是几个函数 torch.load()/torch.save() 通过python的pickle完成序列化与反序列化.完成内存<-->磁盘转换. Module.s ...
- 2013 ACM-ICPC亚洲区域赛南京站C题 题解 轮廓线DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4804 题目大意 给你一个 \(n \times m\) 的矩形区域.你需要用 \(1 \times 1 ...
- 《带你装B,带你飞》pytest修仙之路3 - setup/teardown
1. 简介 学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次.当然还有更高级一点的setupClass和teardownClass ...
- 小小知识点(三十五)MATLAB中如何更改所画Figure的图形比例
1. 打开一个figure,show plot tools and dock figure 2.选择图形的 more properties 3. 选择aspect ratio中的plotboxaspe ...
- Javascript小白经典题型(一)
1. 输出是什么? function sayHi() { console.log(name) console.log(age) var name = 'Lydia' let age = 21 } sa ...
- Flink系列之Time和WaterMark
当数据进入Flink的时候,数据需要带入相应的时间,根据相应的时间进行处理. 让咱们想象一个场景,有一个队列,分别带着指定的时间,那么处理的时候,需要根据相应的时间进行处理,比如:统计最近五分钟的访问 ...