-
当前主流的 MOBA 手游均采用摇杆移动,为了有更好的用户体验,摇杆移动需要解决遇到障碍物后绕障碍物滑行的问题。
-
根据地图数据的不同,摇杆移动的碰撞检测方式有多种。
(1)物理碰撞方式:直接使用点(或圆)与多边形进行碰撞检测,然后绕多边形的边移动.
(2)NavMesh方式:同样需要做点(或圆)与多边形碰撞检测,然后绕多边形的边移动。
(3)栅格方式:检测点是否在阻挡栅格内,或者圆与阻挡栅格的距离,碰撞后移动方向不好确定
(4)基于SDF的摇杆移动。
-
有号距离场( Signed Distance Field,SDF)表示空间中的点到形状表面(比如障碍物)的最短距离(纯量场),一般用距离的负值表示形状内部,用正值表示形状的外部.
-
前面提φ(x)<0表示点x在障碍物内,那么碰撞检测只需要得到点的φ值,然后与碰撞半径r比较即可,φ(x) r表示角色与障碍物发生了碰撞。由于栅格地图的SDF数据是离散存储的,但角色移动是连续的,不能把角色在一个栅格内任意位置的4值等同于栅格顶点,否则会在栅格边界产生巨变。因此,在移动是连续的情况下,无法直接查表获取角色所在位置的φ值,如图1.4所示圆的圆心位置,需要根据周边栅格顶点的φ值采样获取.