繁体   English   中英

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

[英]Movement is dependent to frame-rate. How can i make it independent from frame-rate

我对编码很陌生。 直到现在我搜索了很多东西,但我仍然无法解决我的问题。 我正在尝试使游戏对象遵循线/图。 我试图给他一个负 Y 速度并在每次更新时添加小数字(类似于;update{mybody.velocity += 0.005})以使其移动。 但我遇到了一个低帧率问题,我的 object 走的是超宽路径,而在更高的帧率下,它走的是超紧路。 我怎样才能让我的运动独立。

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;

        }

请注意,在此答案中使用DateTime.NowTimeSpan计算非常昂贵......特别是如果您每帧都使用它来计算以秒为单位的增量。

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

curve += curveupdate * Time.deltaTime;

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

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

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

然后,您应用此数量乘以经过的秒数。 这是如何做到的。

首先,当您启动 animation 时,您需要记住它何时启动:

var lastUpdateTime = DateTime.Now;

然后改变这个:

curve += curveupdate;

对此:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM