74

在unity里实现2D大地图中角色行走-腾讯游戏学院

 5 years ago
source link: http://gad.qq.com/article/detail/287795
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

1.效果展示

5bc9409e80627.gif


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

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

5bc93e788c26f.png

 

4.地图滚动

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

原理图如下所示:

5bc93e972c3e5.png

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

 

5.层与镜头及渲染设定

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

5bc93eeb03772.png

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

5bc93ef69921e.png

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

 

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

5bc93f0a99a2c.png

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

 

6.角色控制

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

 

7.补充

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

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

5bc93f1a0704a.png

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

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

5bc93f2590631.png

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

5bc93f31c9d4b.png

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

 

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK