现在有这么一个问题,玩家在游戏中乘坐上了一个会自己旋转的载具,导致玩家的坐标被动变化。

一般情况下在游戏中我们处理玩家的移动同步参考如下,考虑玩家当前点与上一次的同步点是否出现偏移,以及其他规则检测出的差值(朝向,状态,周期等),如果检出需要同步,则立即上报当前位置信息。

对于这种状态该如何比较好的检出玩家的位移变化呢 ?

刚开始我认为这个检出的过程应该这样:
需要综合 上一次同步点 与 上一次同步的载具旋转角度与当前载具的旋转角度差值,然后三角函数计算出预测下一个落点。再将这个落点与当前要同步的点进行匹配。如果是一个点就不进行同步。

这个判定的计算非常繁琐,还需要额外记录载具的角度变化,那么有什么办法不看载具信息吗 ?

我们再分析下这个需求,载具平台旋转,子物体跟转,相对静止。
有句话是这样说的,当你不知道解题思路,你把题干抄下来,也是能得分的。
没错,答案就是 相对静止


由于是相对静止(船心坐标O),向量 OA蓝色 与 OA红色 他们的长度是没有变化的。
也就意味着,只需要计算上一次同步的相对位置与当前位置的长度差值。就可以判断玩家是否在载具平台上有位移。

1
bool isMove = Mathf.Abs( lastSyncRelPosition.magnitude - currentRelPosition.magnitude) > 0.01f

当然也可以优化成下面这样,不开方更省一些性能:

1
bool isMove = Mathf.Abs( lastSyncRelPosition.sqrMagnitude - currentRelPosition.sqrMagnitude) > 0.01f

大概如此,当然精度可以根据不同的需求进行调整。好了,今天的分享就到这,下期再会 !