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

问题描述 投票:0回答:2

我对编码还很陌生。到目前为止,我搜索了很多东西,但仍然无法解决我的问题。我正在尝试使游戏对象遵循线条/图形。我试图给他一个负 Y 速度,并在每次更新时添加少量数字(例如;update{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;

        }
c# unity-game-engine game-physics
2个回答
2
投票

请注意,使用

DateTime.Now
TimeSpan
计算(如这个答案)非常昂贵......特别是如果您使用它每帧只是为了以秒为单位计算增量。

这实际上正是 Unity 在

Time.deltaTime
中提供的,自上一帧渲染以来所经过的时间(以秒为单位).. 那么,如果我们已经知道该值,为什么要计算它复杂 ;)

curve += curveupdate * Time.deltaTime;

简单来说,乘以

Time.deltaTime
将任何值从“每帧值”转换为与帧速率无关的“每秒值”


0
投票

不要考虑“变化率”,而必须考虑“每单位时间的变化率”。

例如,您似乎正在基于

curve
更新
curveupdate = 0.05f;
,其变化率为
0.05f
。您需要考虑每秒的变化率。假设您当前每帧获得
0.05f
变化,假设每秒 10 帧,这意味着每秒的变化率为
0.5f
(高十倍)。

然后将此金额乘以经过的秒数。以下是具体操作方法。

首先,当您开始动画时,您需要记住它何时开始:

var lastUpdateTime = DateTime.Now;

然后更改此:

curve += curveupdate;

对此:

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

这样,变化量就会根据过去的时间而变化。如果没有经过任何时间,它会一直缩小到 0,如果经过了几个小时,它最终会变得非常非常大。对于最终用户来说,随着时间的推移,变化率应该看起来是一致的。

© www.soinside.com 2019 - 2024. All rights reserved.