当前,我正在模拟物理冲击力以局部避开单位,但是这种方法有时会将单位推离地层,并且当单位结块时会产生非常不利的影响。
对于像《星际争霸2》这样的RTS游戏,如何进行局部回避?是物理模拟还是全能控制器决定一切应该在哪里?我知道这个问题可能有点笼统,所以我专门问如何实现《星际争霸2》的局部回避行为。尽管任何有效的方法都将不胜感激。
我不是在寻找任何代码-只是有用的资源或有关Starcraft 2(或类似游戏)如何处理本地回避的解释。
目前,我已经实现了碰撞检测(带有穿透向量),碰撞力和速度移动。检查每个单元是否相互碰撞-如果它们发生碰撞,则物体会立即被渗透矢量偏移,然后施加碰撞力。然后,另一个循环按其速度移动对象,并将阻力施加到该速度。偏移减轻了施加在结块单元上的过大碰撞力的问题,但是单元有时仍会射出。
我正在寻找的解决方案需要满足以下要求(例如在Starcraft 2中):
- 对象不会重叠;至少必须解决重叠问题。
- 物体不会将彼此推开超过必要的距离,因此2个单位可以在一个编队中直立并相互靠近。
- 当对象聚集到同一目的地时,不应有任何奇怪的行为。
- 可以支撑不同尺寸甚至不同凸面形状的单元。
到目前为止,我一直在思考的不是检测冲突,而是检测将来的冲突,这样就不会发生重叠。然后应用约束,确保2个单位的速度不会导致它们重叠。我仍然在修改限制重叠之外的移动的算法。