概述
使用上下左右移动浅黄色方块,黑色方块每三秒进行寻路一次,路径被红色方块进行标记,黑色方块沿着红色方块追踪浅黄色方块。
实现过程中遇到的坑点
1. Destroy
这里用到小正方标记路径,更新的时候会Destroy之前的小方块,再加上之前的做法直接是获取小正方体的位置,然后黑色方块进行移动,所以就出现了问题,
Actual object destruction is always delayed until after the current Update loop, but will always be done before rendering.enmmm
显而易见,我将会多获取一些使用了Destroy方法的但是在当前loop里还没destroy的小正方体,后来的解决办法为直接获取pathList中的position。
2.Transform.GetChild
原本是for循环遍历获取的小正方体,进行销毁,不知道怎么了,(可能是我飘了)
while(pathRoot.childCount>0) Destroy(pathRoot.GetChild(0));
然后陷入了死循环,卡死,无奈,重启Editor,最后才想起来,当前帧Destroy并不会立即生效,所以这段代码相当于一直在Destroy一个已经加入到销毁名单的对象,并且不会报错。
3.Rigidbody.velocity
小黑方块进行追踪的时候,一开始使用了Rigidbody.velocity来进行驱动,但是会有这个情况,在小黑方块还没到达最终点之前,路径变更,由于是我开了协程yield return null,当设置速度为0,停止的时候,都是下一帧的事了,这一帧,小黑方块已经超出了。于是找到了Vector3.MoveTowards,沿直线向目标position进行移动,移动的最大距离是min(当前位置和目标位置的距离,第三个参数),开协程,每帧进行移动。
实现截图
Demo下载