Event tick中的Delta Secends疑问

该主题包含 4 个回复,有 3 个参与人,并且由 火星机甲 的头像 火星机甲1 年, 3 月 前 最后一次更新。

正在查看 5 个帖子 - 1 至 5 (共计 5 条)
  • 作者
    帖子
  • #19492
    火星机甲 的头像
    火星机甲
    学员
    注册日期: 2015/05/21
    发帖数: 3
    回帖数: 2

    在风之神韵蓝图初级教程中碰撞事件一节用到了Event tick,其中为了消除硬件不同带来的FPS不同的影响,教程中是把Delta Secends的值乘以了一个负数来达成一个Delta Secends值越大结果越小,反之越大的输出值。为什么最终是一样的移动速度呢?这点还不是太理解。

    #19531
    风之神韵 的头像
    风之神韵
    教师
    注册日期: 2014/06/20
    发帖数: 2
    回帖数: 358

    乘以正数 负数 没区别。

    deltaseconds的含义是当前一帧到当前一帧的间隔时间,单位秒。
    比如你的游戏在你的电脑上跑60帧,那delataseconds = 1 / 60 = 0.0166 秒
    同一款游戏在别人电脑上跑30帧,delataseconds = 1 / 30 = 0.0333 秒

    如果这个游戏开发者让角色移动是纯粹按照帧数来累加一个固定值的话,比如每帧移动步伐为100个单位,那么这个角色在你的电脑上每秒移动的距离是 100 * 60 = 6000 个单位。
    在另一台电脑上每秒移动距离是 100 * 30 = 3000个单位。 这就出问题了。

    为了消除这一差距,让100*delataseconds,就可以了。

    这样你的电脑每秒移动的距离是,100 * 0.0166 *60 = 100
    另一台电脑每秒移动距离是, 100 * 0.0333 * 30 = 100

    #19554
    黑暗弥赛亚 的头像
    黑暗弥赛亚
    学员
    注册日期: 2015/07/18
    发帖数: 4
    回帖数: 11

    你好,不管是乘以一个负数或者正数,都可以理解为每秒钟所做的运算。
    比如说你想让A物体每秒钟向X轴(对应世界位置)移动10,那么在TICK事件下需要将Delta Secends乘以10后赋给A物体对应的Add Actor World Offset (对应世界位置)节点里的X。
    之所以这样做,是因为TICK事件每一帧都执行,比如说你的FPS为40(每秒钟刷新40帧),那么TICK每秒钟执行40次,此时Delta Secends的数值为1/40 ,Delta Secends = 1 / (FPS)。所以说每秒物体在世界位置的x轴位移 = 40 * (1/40)* 10 = 10
    那么现在我们换一台机器,在蓝图里写入相同节点,假设那台机器的FPS为23,那么此时每秒物体在世界位置的x轴位移 = 23 * (1/23)* 10 = 10 位移依旧是每秒移动10,这就是所谓的不同机器在相同时间内的相同位移实现。
    不知道LZ明白了没有 :wink:

    上传附件/图片:
    您必须登陆才能查看附件
    #19556
    黑暗弥赛亚 的头像
    黑暗弥赛亚
    学员
    注册日期: 2015/07/18
    发帖数: 4
    回帖数: 11

    :arrow: 没想到风神老师赶在我前面了,是我打字太慢了 :cry:

    #19585
    火星机甲 的头像
    火星机甲
    学员
    注册日期: 2015/05/21
    发帖数: 3
    回帖数: 2

    感谢两位大大的耐心解答,看完以后茅塞顿开! :-D

正在查看 5 个帖子 - 1 至 5 (共计 5 条)

抱歉,回复评论必需登录。