RPG/ MMORPG游戏动态寻路指示标

相信大家都玩过RPG或者MMORPG类型的游戏,就算没有玩过,也应该见过别人玩,这种游戏其中就有一些寻路的模块。比如新手指引任务,你点击了新手指引,然后就会自动寻路过去,为了让游戏更加有体验感,那么我们可以看到有寻路的指示标会出现,并且它会指引我们玩目的地走去。而且你中途停下,或者去做其他事情,它还是会指示你往任务的目的地去,除非取消任务。并且随着你的移动,你的位置发生变化,指示标也会自动的改变角度啊,距离啊这些。那么这就是RPG/MMORPG游戏非常有特色的一个功能了,这个功能应该怎么做呢?用unity能做出来吗?我们今天就要在unity里面来实现这样的一个功能。

话不多说,先上图:

这就是一个简单的寻路指示标的demo,素材比较简陋,而且指示标方向也有点问题,换个纹理就可以了,问题不大,不要介意,哈哈。好了,那么我们怎么把它实现呢?不要着急,先说下原理,再上代码。

寻路的方法有很多种,A*,unity导航网格等等的都可以,我这里用的是unity自带的导航网格寻路组件。OK,我们一步一步来看。首先,搭建一个场景,这个就不说了,很简单。嗯,寻路指示标的原理就是需要得到寻路起点,然后得到终点。最后在这两点之间来弄一些指示的地标,来让玩家知道这是我们移动的方向。这个的实现的方法也有多种。找到适合自己的就是最好的,哈哈。好了,首先手图中的粉色的线条,很明显,大部分朋友应该能看出来,这是用unity的线渲染器组件(LineRender)来绘制的,那么这是怎么画出来的呢。OK,我们知道unity寻路组件里面可以获取你烘焙过后的地图里你要导航的路径点,其中的一些关键的拐点,都可以获得,那么我们就可以用线渲染器来把它们绘制出来,这样粉色的路径路线就呈现在我们眼前了,关键代码如下:

我这里用的是射线检测来获取目的地,然后用导航网格组件里的函数移动,那么如果我们的路径点个数大于1个,我们就开始来获取所有的点,再一一的连接起来。为什么可以这么做呢,因为线渲染器可以画多条线,把他们连接起来。好了,这个粉色的路径线搞定,非常简单吧。然后我们再说下比较难一些的指示标,这个其实也很简单。OK,先说下需求,因为大部分的游戏中,指示标都是可以动态改变长度和角度的,所以我们要做的就是这样的,那么方法也有很多,我这里用的是一个Plane(俗称地板),然后给它上材质,这里要注意一点,我们需要把它做成预制体,然后plane的大小要调小点,和Cube一样大就可以了,这个看大家不一样的需求。然后把它渲染组件里的材质里面的shader改成Mobile/Particals/Alpha Blending。这个就是Alpha通道的常规颜色混合,在这里不细说,选这个就对了。OK,原理是怎么样的呢?就是我们在我们得到了起点和终点的距离后,我们就需要生成一个这样的预制体,然后把这个距离给它的图片的纹理的X和Y的比例,也就是Tiling属性里面的值,根据自己实际的情况赋值即可,我这里是把距离赋值给Y,然后这个距离怎么得到的呢,方法很多种,

这里用的一手勾股定理,数学不会的同学可能都忘了这个了是吧,很正常哈哈。上代码:

很简单吧,这个也不会的就去看看高中的数学吧。好了,再来说角度,这个稍微复杂一点,不过也难不倒我们。上代码:

看到这里,估计有很多朋友心态崩了对吧。早知道要好好学数学了。问题不大哈,这还是很简单的数学方面的东西,学了Shader后才知道数学的重要性!注释我都写了,应该没什么问题。这是关键的两步,好了,然后有了这两个,我们就需要把指示标画出来了,怎么弄呢。注释都有,上代码:

 

关键的显示代码如上所示,其他的都很简单。然后我们的需求就搞定了,没毛病!大概就是这样的一个操作过程,当然这是一部分代码,不能实现效果的,需要完整的代码的朋友可以私信我哦,免费给大家,同时这个方法并不是很简洁的,我这里还有更加优化的方法,大家需要的话可以加 705182843!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值