前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >五分钟技术分享|网络游戏的移动同步过程中载具平台旋转问题

五分钟技术分享|网络游戏的移动同步过程中载具平台旋转问题

作者头像
keyle
发布2024-11-01 12:27:46
600
发布2024-11-01 12:27:46
举报
文章被收录于专栏:礼拜八不工作

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

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

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

这里有一些基础的移动同步知识介绍

KeyleXiao,公众号:礼拜八不工作反思下开发中位置同步遇到的问题

刚开始我认为这个检出的过程应该这样:

需要综合 上一次同步点上一次同步的载具旋转角度当前载具的旋转角度差值,然后三角函数计算出预测下一个落点。再将这个落点与当前要同步的点进行匹配。如果是一个点就不进行同步。

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

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

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

代码语言:javascript
复制
bool isMove = Mathf.Abs( lastSyncRelPosition.magnitude - currentRelPosition.magnitude) > 0.01f

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

代码语言:javascript
复制
bool isMove = Mathf.Abs( lastSyncRelPosition.sqrMagnitude - currentRelPosition.sqrMagnitude) > 0.01f

大概如此,当然精度可以根据不同的需求进行调整。

今天的分享就到这,下期再会 !

附:太阳下山拍的晚霞。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 礼拜八不工作 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档