弹珠游戏需要用到碰撞系统,而Unity自带的物理引擎总是很难达到效果。但从球体碰撞来说,可以自己写一套类似台球的碰撞系统。

考虑到碰撞可能涉及到能量损失,在碰撞过程中的运算如下:

image

图中的碰撞情况可以大致概括此碰撞引擎的基本碰撞算法

ball_1 竖直向上移动,而 ball_2 处于静止状态。放生碰撞之后:

  • 首先要确定碰撞方向,即碰撞小球之间的角度,
  • 算出自身小球沿着碰撞方向发出的力(速度),即将移动速度做一个沿着碰撞方向的分解,
  • 自身受力应该是对方沿着碰撞方向发出的力 + 自身发出的力,即反向力
  • 自身受力与自己本身的力(速度)合成,算出最终速度。

碰撞之后情况如下:

image