微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运动取决于帧速率我怎样才能让它独立于帧速率

如何解决运动取决于帧速率我怎样才能让它独立于帧速率

我对编码很陌生。直到现在我搜索了很多东西,但我仍然无法解决我的问题。我试图让一个游戏对象跟随一条线/图。我试图给他一个负 Y 速度并添加小数字(类似于;更新{mybody.veLocity += 0.005})每次更新以使其移动。但我遇到了一个问题,在低帧率下,我的对象采用超宽路径,而在较高帧率下,它采用超窄路径。如何让我的动作独立。

private float curve = 0;
private float curvemax = 2.3f;
[Serializefield]
private float curveupdate = 0.05f;
if (tracking.found && !hareketeBaşlandı)
        {
            curve = -(curvemax);
            triggered1 = true;
            hareketeBaşlandı = true;
            print(curve);

        }
        if (transform.position.y != y1-curvemax && tracking.found)
        {
            curve += curveupdate;

            print(curve+"Curving");
            
        }
        
        if (curve >= (curvemax))
        {

            curve = 0;
            y2 = transform.position.y;
            transform.position = new Vector3(transform.position.x,y1,transform.position.z);
            tracking.found = false;
            tracking.shouldsearch = false;
            StartCoroutine("trackCD");
            print("track off");
            myBody.veLocity = new Vector2(myBody.veLocity.x,curve);
            hareketeBaşlandı = false;

        }

解决方法

请注意,在 this answer 中使用 DateTime.NowTimeSpan 计算非常昂贵……尤其是如果您每一帧都使用它来计算增量在几秒钟内。

这实际上正是 Unity 已经在 Time.deltaTime 中提供的内容,即自上次渲染以来经过的时间(以秒为单位)..所以如果我们已经知道值,为什么还要复杂地计算它;)

curve += curveupdate * Time.deltaTime;

简单地说,乘以 Time.deltaTime 将任何值从“每帧值”转换为与帧速率无关的“每秒值”

,

与其考虑“变化率”,不如考虑“每单位时间的变化率”。

例如,您似乎正在根据 curve 更新 curveupdate = 0.05f;,其变化率为 0.05f。您需要考虑每秒的变化率。假设您目前每帧有 0.05f 次变化,假设每秒 10 帧,这意味着您的每秒变化率为 0.5f(高出 10 倍)。

然后应用此数量乘以经过的秒数。这是操作方法。

首先当你开始动画时,你需要记住它是什么时候开始的:

var lastUpdateTime = DateTime.Now;

然后改变这个:

curve += curveupdate;

为此:

DateTime currentTime = DateTime.Now;
float secondsElapsed = (float)(currentTime - lastUpdateTime).TotalMilliseconds / 1000F;
curve += (curveupdate * secondsElaped);
lastUpdateTime = currentTime;

这样,变化量会随着时间的推移而变化。如果没有时间过去,它会一直缩小到 0,如果过了几个小时,它最终会变得非常非常大。因此,对于最终用户来说,变化率应该随着时间的推移保持一致。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。