

在unity里实现2D大地图中角色行走-腾讯游戏学院
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.效果展示
2.大地图背景处理
大地图超出2048*2048的都很常见,那么在游戏内我们是如何处理的呢?
首先让美术按要求的规则设计大地图尺寸。比如一张3072*3072的大地图背景,程序在使用的时候可切分出2048*2048,2048*1024,1024*1024,1024*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,在移动的时候我们更新渲染中间层的那个camera的position。这里先不管前景层的,如下图:
如上第一个camera渲染Map层,第二个camera渲染mapBg层。第一个的深度值大优先渲染,且第一个camera设置为Depth only。这里多个camera去渲染几层与一个camera渲染多层是否存在效率问题?(效率影响不大)
上面我们只更新了渲染中间层的那个camera的position,多个camera情况下,我们是否还要处理其他camera的位置更新呢?为了避免这种麻烦,我们可以将所有camera作为物件的子对象,这样移动起来就很简单不需要都去移动。如下图:
MapCamera位置变化我们即可看到角色行走地图滚动效果。
6.角色控制
角色挂载PolyNavAgent,在OnNavigationStarted可以播放跑步动作,OnDestinationReached可以结束跑步进入待机动作。还可以根据PolyNavAgent中的movingDirection计算来确定角色朝向。
7.补充
加深了解Camera深度优先渲染,以及其用处。
如下图正方体挡住了球体,我们只能看到正方体的一面。
如果想看到球体在最前面,要怎么处理?
可能很快想到把camera按Z轴往前,然后Y旋转180即可,如下所示:
但同一场景使用多个camera的方式也值得学习一下,利用深度优先渲染模式,可以更方便的营造视觉效果,能看到后面的物体可显示到上面来了。如下图:
上图我们主camera渲染立方体,新加camera渲染球体,设置新加camera为Depth only模式,设置其深度大于主camera的即可看到上面的效果了。
以上主要介绍大地图滚屏效果涉及到的知识点,还有一些简单的渲染运用等,希望帮到有所需的人加深理解。
Recommend
-
153
在移动开发过程中,从UI图上获取颜色是日常开发中常有的事。不过从图片获取颜色也有很多种操作方式,很多人在日常中取到的并不是“正确”的值。 上策:避免从图片中取值 最好的情况就是不需要开发者从设计图上获取颜色。常见的方式有以下三种。 设计图上直接标注:sk...
-
108
今天早间,外媒报道在中国谷歌地图已经可以使用。这或将是谷歌重回中国的一个信号。不过事情似乎出现了变化。谷歌总部对此做出回应:“TherehavebeennochangestoGoogleMapsinChina.(Google地图在中国没有任何变化)”。
-
124
最近在做网页版图片处理相关的项目,也算是初入了 canvas 的坑。项目需求中有一个给图片添加水印的功能。我们知道,在浏览器端实现图片添加水印功能,通常的做法就是使用 canvas 的 drawImage 方法。对于普通的合成(比如一张底图和一张 PNG 水印
-
96
在我的布局default.ctp我有 <!--nocache--> <?php echo $this->Html->getCrumbs(' / ', 'Home'); ?> <!--/nocache--> 在我称之为rules.cpt的视图中 <!--n...
-
36
有问题,上知乎。知乎,可信赖的问答社区,以让每个人高效获得可信赖的解答为使命。知乎凭借认真、专业和友善的社区氛围,结构化、易获得的优质内容,基于问答的内容生产方式和独特的社区机制,吸引、聚集了各行各业中大量的亲历者、内行人、领域专家、领域爱好者...
-
19
在Neural network还未使用在graph里时, 图聚类就有着很大的需求, 比如在社交网络中的群体分类,如何在图中完成相应地工作,本文基于对cs224w 《Spectral Clustering》的学习笔记,尝试描述清楚,这方面经典的工作。 Gr...
-
5
leetcode 84. 柱状图中最大的矩形 ...
-
13
五分钟读懂:ETH 2.0 路线图中的发展重心—RollupDeFi白泽研究院2021-10-24热度: 28551以太坊实际上可以成为解决区块链三难困境的第一个区块...
-
7
← 著名的邓宁-克鲁格效应或许缺少证据支持圣诞节企业给员工开薪水,英国银行执行了两遍转账操作 →majer
-
7
在 3D 游戏中,都会有一个主人公。我们可以通过点击游戏中的其他位置,使游戏主人公向点击处移动。 那当我们想要实现一个“点击地面,人物移动到点击处”的功能,需要什么前置条件,并且具体怎么实现呢?本文带大家一步步实现人物行走移动,同时进行状态改...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK