足球多人竞技游戏,采用帧同步,球的轨迹该如何来做,,

6回答

足球多人竞技游戏,采用帧同步,球的轨迹该如何来做,,

提问者 龙渊 2017-09-12 1.2k浏览
足球多人竞技游戏,采用帧同步,球的轨迹该如何来做,,
我们是用unity做的,,为了保证同步,首先unity的物理引擎是肯定不能用了,,
我这边做法是:
服务器是每秒20帧的广播
如果是直线运动, 以服务器的帧,进行每一帧计算移动的距离,然后视图层进行位移跟随平滑,,,
当前速度 = 初始速度 加速度 * (当前帧 - 开始运行时候的帧) * 0.05f;
然后根据当前速度求出移动的距离,,然后视图层进行平滑位移,
如果是抛物线运动,,这个该如何计算呢,,,,,,,,,

快来消灭0回答吧

{{ dataList.answer_count | view-format }}回答
  • gavindong 2017-09-12 19:57
    专家回答
    一样的公式
    当前速度 = 初始速度 加速度 * (当前帧 - 开始运行时候的帧) * 0.05f;
    把速度、加速度都用矢量既Vector3表示就好了
    当然不是Unity原生Vector3,是你们自定义的整数Vector3
    1评论
  • 邓涛 2017-09-13 09:49
    专家回答
    我想我大概理解你的问题了,说下我的理解啊

    1.球的运动轨迹是抛物线,假定轨迹方程为f(x) = ax^2   bx c, 一般运动模拟我们用参数方程: p = v0 * t    0.5 * a * t^2,我们假定数学上定义的曲线,称为原始曲线

    2.运动过程是一个位移积分的过程,而实际过程中是采用微分时间片的方式来积分的

    3.时间片微分的粒度越大,得到轨迹与原始曲线的偏差可能越大(数学上叫拟合度不够)

    4.题主的问题是,逻辑层和表现层用的同一套方程,但是微分的时间片粒度不一样,所以轨迹可能产生较大的偏差,导致预测(predicate)误差变大的概率会增大,误差太大,经常超出容忍范围,老是要暴力修正,体验达不到题主想要的预期,是不是?

    5.由于不能互动,假定我的理解是正确的,那么这个问题怎么解呢?

    常规的方式有两种:
    1.最常用的方式,其实通用性也很好,将逻辑层物理模拟的部分微分的时间片设定到跟表现层一致(或者接近),这就意味着在一个逻辑帧里面,物理可能迭代多次。这个跟大部分以时间片积分的物理引擎处理方式一致。unity的fixedupdate也是这个意思。

    2.采用严格的参数方程,每次的位置通过方程直接求出来,这样会限制运动轨迹始终在曲线上,偏差只会由数值计算精度导致,而不会由时间片导致。(更新时间片粒度不一致,暂不考虑),不好的地方是如果由其他外力加入,会导致方程经常需要改动,而且这些影响因子还得能用函数表示,最终的方程得手算,对于复杂环境比较难算,所以一般这样的模型只会用在特定的环境,比如物体沿着某个特定的轨迹运动。

    结论:
    建议还是用第一种吧,工程上实施成本很低,而且可以防止时间片过大的导致的“穿透”问题。
    6评论
  • 281328686 2017-09-13 09:46
    抛物线,用位移合成:分开Y轴和XZ面的直线运动进行向量合成,得到球的位置
    0评论
  • 2017-09-13 00:18
    使用第三方服务器可以直接实现
    2评论
  • 我叫曾哥 2017-09-13 14:35
    如果要严格一致的话,注意不要使用浮点运算哦
    1评论
  • 浪梵阗 2017-09-15 15:50
    想象中的观点,多人竞技,视点还是足球吗?如果切换视点或者拉远视距的话,这种计算就又要重做了吧?
    2评论
  • {{ answer.user.NickName }} {{ answer.profession }} {{ answer.created_at | time-format }}
    专家回答
    {{{ answer.answer }}}
    {{ answer.answer_count | view-format }}评论
加载中... 查看更多回答