在unity里实现2D大地图中角色行走

发表于2018-10-19
评论7 1.75w浏览

本文主要分享整理在unity里实现2D大地图中角色行走的一些知识点

1.效果展示


2.大地图背景处理

大地图超出2048*2048的都很常见,那么在游戏内我们是如何处理的呢?

首先让美术按要求的规则设计大地图尺寸。比如一张3072*3072的大地图背景,程序在使用的时候可切分出2048*20482048*10241024*10241024*2048四张背景;

由于从大背景图切出的四张背景图也相对比较大了,注意别设置packing tag,最终也就是让各个图集独立;

一个大地图做成一个预制,打包自己的ab包,可按实际所在地图id去加载使用。

当然可能还有更好更好的2d大地图背景处理方法,欢迎继续讨论学习。

 

3.大地图地形数据处理

看到这里可以先去看看之前介绍的poly nav 2d相关的内容,它是使用A*基于多边形的2D寻路解决方案。传送门:http://gad.qq.com/article/detail/43459

可编辑的多边形,我们可以编辑拖动多边形线条已适应地图背景各种障碍区域边缘。如图所示:

 

4.地图滚动

我们一般会给地图背景layer指定一个做渲染绘制的camera,这里的地图滚动其实就是camera的位置变化带来的效果。所以我们只需要一个镜头跟随的脚本,用来处理在目标如主角位置变化时,动态调整camera镜头位置即可。

原理图如下所示:

上图红色线条表示坐标系,蓝色框即表示镜头框,红色三角表示跟随目标。在目标位置发生变化后,镜头做相应位置变化,这样就是地图滚动效果。

 

5.层与镜头及渲染设定

我们可分为背景层MapBg、中间层Map、前景层MapFront等等。地图背景Layer可设置为MapBg,角色Layer可设置为Map,根据需要前景层可放Alpha遮挡贴图,可用来处理物件的遮挡效果。如下图:

同时,我们可分三个camera去渲染绘制这三层,设置其Depth用于控制摄像机的渲染顺序。角色Layer也设置为Map,在移动的时候我们更新渲染中间层的那个cameraposition。这里先不管前景层的,如下图:

如上第一个camera渲染Map层,第二个camera渲染mapBg层。第一个的深度值大优先渲染,且第一个camera设置为Depth only。这里多个camera去渲染几层与一个camera渲染多层是否存在效率问题?(效率影响不大)

 

上面我们只更新了渲染中间层的那个cameraposition,多个camera情况下,我们是否还要处理其他camera的位置更新呢?为了避免这种麻烦,我们可以将所有camera作为物件的子对象,这样移动起来就很简单不需要都去移动。如下图:

MapCamera位置变化我们即可看到角色行走地图滚动效果。

 

6.角色控制

角色挂载PolyNavAgent,在OnNavigationStarted可以播放跑步动作,OnDestinationReached可以结束跑步进入待机动作。还可以根据PolyNavAgent中的movingDirection计算来确定角色朝向。

 

7.补充

加深了解Camera深度优先渲染,以及其用处。

如下图正方体挡住了球体,我们只能看到正方体的一面。

如果想看到球体在最前面,要怎么处理?

可能很快想到把cameraZ轴往前,然后Y旋转180即可,如下所示:

但同一场景使用多个camera的方式也值得学习一下,利用深度优先渲染模式,可以更方便的营造视觉效果,能看到后面的物体可显示到上面来了。如下图:

上图我们主camera渲染立方体,新加camera渲染球体,设置新加cameraDepth only模式,设置其深度大于主camera的即可看到上面的效果了。

 

以上主要介绍大地图滚屏效果涉及到的知识点,还有一些简单的渲染运用等,希望帮到有所需的人加深理解。

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