1.使用FixedUpdate而不是Update
1.物理运算,比如刚体运动系统的运算是通过固定的时间来驱动的。
2.再moba帧同步游戏中,15帧的固定调用差不多是网络那边的极限了,采用其他手段如平滑显示来提高画面的平滑度。
FixedUpdate是以一个固定的帧率驱动的,符合物理刚体碰撞的要求
2.单个物体碰撞
首先要得到内嵌的长度,半径-op(p点是碰撞后,碰撞体离物体最近的一个点)
如何找最近的点?
1.得到向量(物体中心点减去碰撞体中心点)ko
2.dot 点积得到box分别在x,z轴上的投影
3.得到p点坐标(x,z):碰撞体的中心位置,+= x和z轴的偏移位置(投影)
tips:需要钳制x,z轴上的投影。必须在碰撞体范围内
如何改变速度的方向:
首先得到速度方向在法线上的投影TO
OV-OT=>OV+(-OT)校正速度的方向
tips:需要保证物体是朝着碰撞体运动(即速度方向和po法线向量的夹角要大于90度),才修正碰撞后的方向。
3.多物体碰撞
1.什么时候要回弹?怎么判断回弹的角度?
回弹条件:速度方向在角aoc之外,需要反弹
引入法线的中间向量,如图中b法线,判断角2和角5的大小,如果5>2,说明满足回弹条件,需要回弹
2.回弹的大小?怎么判断
找速度方向与边缘法线的夹角最大值,如角3和4,4更大,所以是看v方向和a法线的夹角,计算投影大小
代码: