使用PathfindingProject Pro 4.0.10实现2D自动寻路

昨天由于策划的要求,要在项目的最后加个自动寻路的功能,跑去研究了下自动寻路的插件。不多说,上操作

首先在寻路的游戏物体上加上seeker、AI Lerp这两个脚本,注意要给target赋值。

之后给目标位置加一个Target Move组件,同样的也需要给target赋值,并勾选下两个参数。

最后创建一个空物体,添加Atart path组件,添加graphs并设置width和Depth,这个时候只能看到一条横线,要更改rotation,具体更改的参数入下图所示,你的障碍物是哪一层就将collision testing的mask设置为哪一层。

 

 学习链接:

http://blog.csdn.net/jjiss318/article/details/41408559

 

使用心得:真实得到的路径会七拐八拐,改变障碍物层使之只有一条路

 

如果想要不绘制寻路曲线,不勾选下面参数

 

如果想要不让其一开始移动,不勾选下面参数(注意canSearch参数一定要勾选上)

 

如果想要一定条件满足后开始自动寻路,修改AILerp脚本中的startHasRun = true;并调用Init();

CalculateNextPosition(out direction):能够得到计算的下一个点的世界坐标

 

项目中有个需求是需要根据当前变化的位置播放上下左右方向的动画,所以在得到计算的下一个点的坐标根据坐标改变的是2D坐标系的X还是Y值判断方向,但是在这个过程中会有一点的抖动,原因是它计算的值中间出现不正常的变化,比如当前一直改变的是Y值,中间会变化一下X值(只变一下,特别坑爹),播放的动画就会变化,因此出现抖动

解决方案:判断两次坐标XY的变化>0.2(一次是0.1)

        if (lastPos.x - transform.localPosition.x > 0.1f)
        {
            name = "zuo";
        }
        else if (transform.localPosition.x -lastPos.x > 0.1f)
        {
            name = "you";
        }
        else if (transform.localPosition.y -lastPos.y > 0.1f)
        {
            name = "bei";
        }
        else if (lastPos.y - transform.localPosition.y > 0.1f)
        {
            name = "zheng";
        }

 

posted @ 2017-07-14 09:34  千喜ya  阅读(2028)  评论(0编辑  收藏  举报