如何实现 正确碰撞功能



  • 我给物件添加了刚体 碰撞停止设为真但有的时候会 直接穿墙啥的 特别是一堆怪物聚集在一起围殴角色的时候会挤得角色突然闪现到其他地方





  • 纯加刚体和其他移动能力让系统自己判断的话,估计没办法避免这个问题,因为系统也不知道谁该挤走谁不该挤走,只知道它们不应该重叠在一起,所以这个情况没啥比较简单的好方法。没记错的话,我记得我试验过,是人物和怪物的碰撞区域越大,数量越多,越容易触发这种情况,所以我一般都不给人物和怪物互相阻挡的这种设计(当然,如果双方移动都不是很灵活我而又有必要加这个功能的时候我会加),就是怕不知道挤到哪里去,而是自己写事件,让怪物的移动目的地在角色的附近而不是角色身上,尽量避免它们挨得太近。当然,理论上硬要用应该也不是没有办法,因为通过观察,是“有移动能力”的实例与“有刚体能力”的实例重叠时,“有移动能力”的实例会被挤开,像墙壁、石头这些纯粹只有刚体的障碍物,应该是不会被挤开的,你说的情况是双方都加了“刚体”和“八方向移动”等移动能力才有可能出现,那是否可以找一个不会被"刚体"挤开的移动能力替代角色现有的移动能力,只让角色不被挤开呢?当然只是个猜想,我也没验证过,希望能给到你一点思路吧。



  • 那你这障碍物不是也对主角没效果了吗……😂



  • 感觉这个思路不错,我做了几个测试:
    方法一
    undefined
    结果:可以看到至少人物是不会“闪现”了,但是敌人还是有“闪现”现象
    undefined
    测试的这里,敌人的移动用了一个不会跟刚体互相作用的“移动追踪”能力,主要是还原大多数人的使用习惯(因为不少人应该会用精灵自带的“移动到”系列的动作),但其实要回避这个问题,只要保证它们都只用一个移动能力即可,只是这样敌人的移动写起来就会麻烦许多,具体如下:
    方法二:
    undefined
    结果:可以看到双方都不会“闪现”了,但是人物也无法挤开敌人了
    undefined



  • 接上面:
    到这里,虽然原先的问题解决了,但新的问题出现了(人物无法挤开敌人),如果对新的这个问题还是接受不了,可以在方法二的基础上进行加工:
    undefined
    结果:可以看到敌人依旧有"闪现"问题,但是不像方法一那样频繁,只在角色撞向敌人时才会触发
    undefined
    最终结论:要解决这个问题的简单方法就只有以上这些了,指望不写或少写事件完美解决这个问题应该是办不到的,纯用物理能力或许可以,但是用了物理能力的话,就所有操作都要基于物理能力去设计角色控制,不然就会乱飞,工作量也是只高不低


登录后回复