找回密码
 立即注册
查看: 3716|回复: 73

[常见问题] 【有图】跪求高手解答‘蘑菇大战’出兵的队形、寻路和躲避障碍物算法,已经卡了一...

[复制链接]
发表于 2013-7-15 20:13 | 显示全部楼层 |阅读模式
目前我的几点想法如下:
1、使用A*寻路,遇到障碍物进行左右分兵,但是分兵是个很麻烦的事情,而且还会出现一队士兵与两个塔相撞的情况,处理起来很麻烦,而且要实现阵型根据通道的宽窄进行收缩;
2、方案1的妥协做法,不进行分兵,直接使用A*寻路,但是问题是寻路是按阵型的中心点来的,不管阵型的宽窄,寻路的路径是一样的,所以按照寻路的路径运动的话,会出现阵型运动到塔边缘时,与塔重合的情况。
当然,这只是几个大的问题,还有很多问题,我也尝试了很多方案,但是都达不到理想的效果,目前已经是黔驴技穷,希望有大神可以给些思路,感激不尽!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2013-7-15 21:30 | 显示全部楼层
我没做过rts小队寻径,但我接下来想做这方面的技术探索。目前只能提供些个人想法:
1.目前从图上来看是可以允许小队间彼此碰撞,这样其实主要就是要解决士兵群与寻径路线上障碍物的碰撞问题。
2.考虑A*的启发式公式的时候,除了距离因子,还应该考虑该格子为中心的“半径”范围。也就是包围该格子的邻居是否可以通过的数量。因为除了倾向于更近准则,同时也倾向于更能容纳更多的士兵单位。
3.当目标点周围都足够容纳整个军团,军团倾向于标准A*移动。当不够的时候,根据按照军团一个小队跟着一个小队的方式移动。

点评

真的很感谢您的回复! 看完之后我有几点疑问: 1、小队与小队之间彼此碰撞,是为了实现碰到障碍物分兵的问题,但是分兵之后两部分兵环绕障碍物的移动轨迹需要怎么确定,而且要保证每部分兵的相对位置不变,也就是保  详情 回复 发表于 2013-7-16 10:08
 楼主| 发表于 2013-7-16 10:08 | 显示全部楼层
lhy_ps 发表于 2013-7-15 21:30
我没做过rts小队寻径,但我接下来想做这方面的技术探索。目前只能提供些个人想法:
1.目前从图上来看是可以 ...

真的很感谢您的回复!
看完之后我有几点疑问:
1、小队与小队之间彼此碰撞,是为了实现碰到障碍物分兵的问题,但是分兵之后两部分兵环绕障碍物的移动轨迹需要怎么确定,而且要保证每部分兵的相对位置不变,也就是保持队形不变,而且越过障碍物之后,队形会还原;
2、关于第二点,是不是需要修改A* 的算法,以满足需要。而且根据需要,应该是倾向于更近准则的,无法通过时采取动态收缩的方案

其实我现在遇到的瓶颈之一就是动态收缩的问题,如果能解决,肯定能有很大进展!
 楼主| 发表于 2013-8-23 11:38 | 显示全部楼层
经过一段时间的探索,基本上有些样子了,下面分享一下主要的思路:
首先使用AStarPathFinding插件寻路,方格大小设置为20左右,这个具体看项目需求,尽量不要使用插件里面的Smooth对路径进行平滑处理,原因是做过平滑处理之后路点太多,不利于接下来遇到障碍物分兵的逻辑实现。不过可以自行做平滑处理,方法是使用递归,做两层循环,外层循环从第一个路点开始到最后一个路点,内层循环从最后一个路点开始,在两点之间发射线,没有检测到碰撞体的话,直接把内循环当前路点之前的路点(除了第一个)都给删除掉,意思就是从第一个路点直接走到这个路点,以此类推。
经过上面的步骤之后就得到一个优化了的路点集,做一个循环,从第二个路点开始到最后一个路点,分别向前一个路点发射线,根据检测到的碰撞位置算出分兵之后两队兵分别往左右偏移的距离,这里假定的是碰撞体做成是球形,然后在路点信息里记录下某两个路点之间在多远的地方会有分兵,左右分别偏移多少,左右分别多少兵等这些信息,然后在update里面进行进行判断,如果到达分兵点就开始分兵,当然还要收兵,收兵的信息也可以记录在路点信息里面。
最后就是有些障碍物不用分兵,但可能需要队伍做伸缩处理,这里我使用的方法是从以排为单位,中心点在每排中间,从中间往左右发射线,长度都为每排的长度,然后在FixedUpdate里面检测左右的碰撞,然后算出这排兵是应该往左偏、往右偏、收缩、还是展开,动态改变每个士兵的位置即可,最好要做一下平滑处理。
以上就是主要的思路了,不够详细,但是如果有做过这方面研究的,应该能得到一些启发。
代码由于是公司的项目,没有上面的批准是不能放上来的,还请谅解!
发表于 2017-2-13 10:41 | 显示全部楼层
很不错
发表于 2017-2-13 10:15 | 显示全部楼层
楼主是超人
发表于 2017-2-13 10:17 | 显示全部楼层
顶顶多好
发表于 2017-2-13 10:46 | 显示全部楼层
说的非常好
发表于 2017-2-13 10:17 | 显示全部楼层
很好哦
发表于 2017-3-30 22:29 | 显示全部楼层
楼主是超人
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-24 03:20 , Processed in 0.105750 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表