编辑器演示:悬崖算法分解和系统编程实操

发表于2016-01-07
评论3 2.2k浏览

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

         

       

     


二、悬崖系统tile拼接原理
2.1 概述
  文中项目是使用模型tile来拼接悬崖系统。Tile之间的模型有一定的规则保证他们能拼接,在编辑器里面编辑的实际是一个二维数组,程序根据这个二维数组来寻找相应的悬崖模型填充在当前位置上。
  一个tile占2x2个地形网格,一个256x256格子的地形,可以放128x128个地形tile。
  所以在程序里面记录地形信息的是一个129x129顶点的二维数组。
2.2 基本高度
  每个定点可以存储A,B,C,D 四种高度信息,在拼接tile的时候可以根据四个顶点的值来选择tile来填充。
  如下图所示:
A:  地下一层。
B:  地平面,默认的地面都是这个高度
C:  地上一层
D:  地上两层
 
        


2.3 崖tile命名&拼接原理
  每一个悬崖tile都一个名字例如
  CliffNatural0_BBBC_00 
  CliffNatural0 代表悬崖的类型。
  BBBC代表tile的拼接信息,根本是左下,右下,右上,左上四个角的高度信息。BBBC  就代表这个模型在左下,右下,右上都是和地平面一样高,左上角是一层高。
  00代表这种tile的序列号,有00-03, 4种在程序里可随机选择。

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

         

  笔刷在地形上刷过,会存储ABCD 四种不同的信息。
  当玩家选择 降低悬崖笔刷 刷过中间的2个点。

                 

          

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

          

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

            


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

      

  由上图可知旋转产生下一个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个点的信息来判断哪里需要出现斜坡地形,和地形的高度。

            


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

          

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

          

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

     

  视频效果

  

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