Unity引擎制作仿《文明》游戏

本文介绍了一位游戏制作者使用Unity引擎尝试仿制《文明》游戏过程中,如何生成类似《文明》中地形的过程。通过研究随机分形地形算法和Unity的TerrainData接口,作者实现了初步的地形地图。尽管面临如地形美观度和块间边界处理等挑战,通过平均值方法改善了边界问题。作者分享了当前的进展,并邀请有兴趣的读者一起探讨。
摘要由CSDN通过智能技术生成

     首先要说的是为什么要仿《文明》而不是其他什么么的仿雷电、RPG此类。

     第一点,游戏制作室自发性质,所以要选热爱的游戏类型,这样才有动力做下去。我所热爱的游戏,而且不能这么宏伟,可以想到的是小时候FC上玩的热血篮球,初高中玩的CS、大富翁、富甲天下,近期玩的一下卡牌类游戏,还有就是战略游戏:文明5,纪元系列;第二点,选《文明》是因为相比其他游戏而言,它占用的美术资源少,大多是算法的实现。

     当然我也没什么游戏制作经验,猜想了一下《文明5》的内部需要实现的关键技术,最先想到的是生成一个随机地形。这篇文章就是关于生成一个初步的地形地图。


     查资料。

     网上查了一下资料,下面两篇文章对我帮助甚大,对原作者表示感谢:随机分形地形算法,   地形算法小结,两篇文章是同一个作者,一篇是翻译一篇是原创。这两重要资料让我了解到地形可以用高度图表示,如何确定地形纹理。

     Unity接口。Unity提供了用高度图设置地形以及设置地形纹理的接口,这些接口在TerrainData这个类里面。

     实现。

     资料所提供的算法生成的地形非常随机,而游戏要求的地形却是大部分是平原,小部分是高地,偶尔有几座山,显然算法不适合我们。考虑到文明系列的地图实际上是多边形组合而成(正方形、正六边形)的,我也可以将地图分成N块,每块应用地形算法,调整算法的系数,生成指定地形还是可以做到的。

     问题。

     用这种方法实现的话,也有不少问题。如果日后能成游戏的话,整个地图就行一个棋盘,有正方形组合而成,非常不美观,不如《文明5》的六边形组合美观,这点看以后能不能改进吧。

     另一个较为严重问题是块与块之间的边界不好处理,边界感觉很分明:



      这段时间都在处理这个问题,想了很多复杂的办法。实在没办法了,采用平均的办法。我目前采用的办法:对于高度图每一点heightMap[i,j] = sum([i-range,j], [i-range+1,j], ..., [i+range-1,j],[io+range,j]) / range / 2。就是取x轴周围range范围内的点的高度的平均值,Y轴也做同样的工作。

      令我意外的是,如果反复进行设置地形步骤和平滑地形步骤,得到的效果还不错。


当然这效果我还不太满意,以后会在这个方向多努力。


这就是我目前的工作了,先把代码贴上吧。关于代码,有很多可以讲的细节,实在无力在此说明,有兴趣的朋友可以发我的常用邮箱共同探讨:clevenmfang2010@qq.com

用法:新建地形,HeightMapCreater脚本附于其上,设置一下参数:

参数填4,反复按"Set"和“Smooth”按钮,

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值