编辑器演示:悬崖系统编程实操

发表于2015-04-30
评论0 1.9k浏览

一、悬崖系统在其他游戏中的应用

    悬崖系统是暴雪RTS游戏里一个比较核心的部分,应用比较多,像war3,星际争霸2等。在游戏中使用悬崖系统可以非常简单并快速的创建地图的地形。在游戏开发期间,不需要专业的美术技能,关卡策划自己就可以很轻松的搭建好整个地图的布局。游戏发布后也可用于开放给玩家自己编辑器地图,让游戏变成一个平台。例如这么多年来玩家基于war3强大的编辑器开发出来像dota,3C, 真三国无双,等一系列各种好玩的地图。

http://km.oa.com/files/post_photo/258/177258/452c30b47c6702db8d6519265d563cb1.jpg  

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image002.jpg

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image003.jpg

 

 二、悬崖系统tile拼接原理

2.1 概述

     文中项目是使用模型tile来拼接悬崖系统。Tile之间的模型有一定的规则保证他们能拼接,在编辑器里面编辑的实际是一个二维数组,程序根据这个二维数组来寻找相应的悬崖模型填充在当前位置上。

     一个tile占2x2个地形网格,一个256x256格子的地形,可以放128x128个地形tile。

所以在程序里面记录地形信息的是一个129x129顶点的二维数组。

 2.2 基本高度

每个定点可以存储A,B,C,D 四种高度信息,在拼接tile的时候可以根据四个顶点的值来选择tile来填充。

 

如下图所示:

A:  地下一层。

B:  地平面,默认的地面都是这个高度

C:  地上一层

D:  地上两层

 

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image004.png

 2.3 悬崖tile命名&拼接原理

每一个悬崖tile都一个名字例如

CliffNatural0_BBBC_00 

CliffNatural0 代表悬崖的类型。

BBBC      代表tile的拼接信息,根本是左下,右下,右上,左上四个角的高度信息。BBBC  就代表这个模型在左下,右下,右上都是和地平面一样高,左上角是一层高。

00         代表这种tile的序列号,有00-03, 4种在程序里可随机选择。

 

 

 

新建地图时地形时顶点是上存储的都是B:

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image005.png

笔刷在地形上刷过,会存储ABCD 四种不同的信息。

当玩家选择 降低悬崖笔刷 刷过中间的2个点

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image006.jpg

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image007.png

然后根据地形上存储的高度信息来选择tile填充:

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image008.png

  下图空心大的字母表示顶点上存储的高度信息, 实心小字母组表示当前块填充的tile名字。可以看出通过左下,右下,右上,左上,顺序的4个顶点信息就确定了需要填充哪一块tile。

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image009.png 

 

   一块tile通过旋转可以产生4种不同的状态,同时也对应有4个名字。如上图中 bbab bbba abbb babb四块tile实际上调用的是一块源tile abbb,通过将abbb按逆时针方向旋转90度 180度 270度能得到另外3种tile。

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image010.png

由上图可知旋转产生下一个tile命名的规律是 每一位字母向后移一位,超出4位的放到第一位。(例如随便一个ABCD 的编号,它往逆时针方向转90度的编号是 DABC,逆时针方向转180度的编号是CDAB, 逆时针方向转270度的编号是BCDA.)

三、 斜坡拼接原理

    斜坡的填充和上面的规则一样,只是斜坡块占的格子大小可能是2个悬崖块的大小,或者4个悬崖块的大小,另外为了和一般的tile做区分,用了另一种命名方式来命名斜坡tile的名字。

斜坡的拼接信息里可能会出现B C D Q R S 六种字母,B C D 和常规的tile表示的是一样的, Q R S 分别表示:

Q: 地面高度

R: 地面一层高度

S: 地面二层高度

  例如名字叫BBQR的斜坡tile,程序会根据R Q 2个点的信息来判断哪里需要出现斜坡地形,和地形的高度。

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image011.png

 四、悬崖和地形的材质混合

    地形和悬崖系统材质衔接的部分,悬崖模型使用了混合材质。 在悬崖模型的贴图上带有一个alpha透明通道。

 http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image012.png

   上图在引擎里黑色部分会使用地形的材质,白色部分是悬崖模型本身的材质。

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image013.png

上图为在引擎中的实际混合效果。

http://avocado.oa.com/fconv/files/201310/aab00d77f2d516a58ae09a174b56e3ce.files/image014.png

视频效果

  


如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引