unity3d 碰撞销毁子弹人物和障碍物碰撞停止运动

博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)unity3d中,刚体和碰撞体的问题。????????
[问题点数:30分]
unity3d中,刚体和碰撞体的问题。????????
[问题点数:30分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|看到寻路问题又被人顶上来,我就说下我是怎么解决多人寻路把别人当成障碍物的问题的
相信大家用unity3d自带navmeshagent寻路的时候,一定会碰到多人寻路相互挤压的问题。
这个我已经解决了,而且已经应用到我们的项目中,感觉还不错。
首先提下问题的原因:navmeshagent在寻路的时候,并不会把别人当成障碍物,而是在即将和其他agent碰撞的时候,通过减速,碰撞转弯,实现避开其他agent.
但这在游戏中是无法接受的体验。
国外有一个人用了一个办法,大幅的减少了碰撞和挤压的行为,网址:
他用了代理的方法,非常聪明,而且你看它的例子,几乎感觉到完美。但经过我的测试,实际情况还是会可能出现挤压和卡主的情况。
所以如果你的寻路物体足够多,我建议用这种方式解决,首先效率很高,表现的也足够好。而且对于大量物体寻路,少数卡顿本来也是合理的。
第二种方法我不推荐,但也许是我自己实现不对,那么就是navmesh obstruct, 这个可以挖洞,挖洞之后寻路的时候就会把别人当成障碍物。
但是有三个问题。1,寻路组件和障碍物组件不能同时存在,也就是你要自己处理何时寻路,何时是障碍物。 2.
挖洞并不是实时,而且挖的洞如果刚好形成了一个凹变形,那么狠不幸的,你的寻路要绕老远了。 3.偶尔会卡死,我通过vs
attach,发现是Navmesh底层汇编卡死了,原因不明。 当然也许是我没用好,不过我最终放弃了这种方法。
第三种方法,用市面上大部分自称local avoidacne的插件,包括最著名的A* pathfinding project. 这个我只能呵呵了,其实他们的行为和navemeshagent是一样的好么。不信你们可以下载一个试试。
那么问题来了,到底怎么才能实现一套不错的寻路,能让少数人之间完美的避开呢。
我最终解决了,方法如下:
A*寻路的时候把别人当成障碍物。
妈蛋,就一句话? 是的,但别小看这一句话,需要解决的难点非常的多。我主要列几个问题:
1.实时问题,即使你很好的把其他人当成障碍物,并且找到一条路径,可大家都是运动的,总有人会走到你的路径上挡住你,这怎么办。这需要通过AI策略解决。当有人挡住你,你需要停顿住,等待对方离开继续沿路行进。如果等太久,比如超过1s,那么其实就应该重新寻路。
2.性能问题。你很可能需要频繁的寻路,但A*效率比自带的低很多。我建议大家采用simple path的排队策略,能够大幅提高性能。
3.寻路物体大小和网格大小问题,物体有大有小,可能网格太小,但物体很大,怎么寻路的时候判断网格到底是不是真的可以容纳物体?这个其实不难,只要将物体的半径/网格的大小,就可以知道到底几个网格才能够行走。
4.手机上性能吃的消吗?我增加了一个策略,当寻路超过500格,就停止寻路,走向离目标最近点的格子,手机上妥妥的。
还有大量的优化的点,我就不一一例举了。
接下来你肯定要问了,说了这么多,干货呢?
哈哈,代码我已经发布到商店了,但要钱的哦。当然我其实是非常想要开源的,但目前我们游戏开发尚未完成。等做完后,我就公布这部分的代码。
当然你如果一定要慷慨解囊也是可以的。不过声明一下:我的代码通用性并不强,所以你们肯定需要根据自己游戏的实际情况做一些改动。所以我的代码主要
还是用来给你们参考最核心的部分,其他细节需要你们自己优化。代码总量应该就3k+,而且大部分A*和simple path一致,不难看懂。
这是商店地址:
这是博客地址:
要评论请先&或者&
多谢分享!!1
这些东西自己根据实际情况研究出来还是非常花时间的
楼主的是2D的么?我想结合着2d toolkit来做的,不知道可否?
:楼主的是2D的么?我想结合着2d toolkit来做的,不知道可否? 虽然没做过2d 但2d应该更加容易,因为A*算法本身就是2d上的,为了应用在3d上还要特殊处理不少东西。只在2d上做的话你按照正确的思路肯定是可以的
:虽然没做过2d 但2d应该更加容易,因为A*算法本身就是2d上的,为了应用在3d上还要特殊处理不少东西。只在2d上做的话你按照正确的思路肯定是可以的 噢噢,你的意思是说,我不应该用系统自带那个寻路,而是直接自己算法实现更加简单?
:噢噢,你的意思是说,我不应该用系统自带那个寻路,而是直接自己算法实现更加简单? 看你的实际需求吧 自带寻路优点是效率高,缺点也说了,会相互挤压。 A*你可以通过自己修改各种逻辑实现你真正想要的寻路。 当然个人觉得用法上肯定是自带的简单,A*其实还是麻烦一些。
:看你的实际需求吧 自带寻路优点是效率高,缺点也说了,会相互挤压。 A*你可以通过自己修改各种逻辑实现你真正想要的寻路。 当然个人觉得用法上肯定是自带的简单,A*其实还是麻烦一些。 我试过自带的了,跟2d toolkit没办法很好的结合起来= =。。算了,还是自己修改算法来试试吧。。博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 unity3d 碰撞销毁子弹 的文章

 

随机推荐