Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在定时器上运行lerp_C#_.net_Lerp - Fatal编程技术网

C# 在定时器上运行lerp

C# 在定时器上运行lerp,c#,.net,lerp,C#,.net,Lerp,首先,我没有使用任何类型的游戏引擎,我正在用C#修改游戏,我没有使用UnityEngine API,所以我没有任何Update()函数 所以我想弄清楚如何创建一个计时器,一个标准的开箱即用的C#计时器,它可以在设定的速度上增加lerp距离 model.rotationM = Vector3.Lerp(model.rotation, model.rotationM, (float)0.016); NAPI.Entity.SetEntityRotation(model.handle, model.r

首先,我没有使用任何类型的游戏引擎,我正在用C#修改游戏,我没有使用UnityEngine API,所以我没有任何Update()函数

所以我想弄清楚如何创建一个计时器,一个标准的开箱即用的C#计时器,它可以在设定的速度上增加lerp距离

model.rotationM = Vector3.Lerp(model.rotation, model.rotationM, (float)0.016);
NAPI.Entity.SetEntityRotation(model.handle, model.rotationM);
我想将其封装在一个计时器中,每100ms,它将在一段时间内增加lerp末尾的浮动一定量,因此假设我设置
浮动速度=5f
我想每100ms增加一次lerp距离,持续5秒,直到达到目标


这是可能的吗?

我创建了一个示例计时器类,它将以给定的量缓慢递增一个值,直到它达到100%(1.0):

所以你可以调用它一次,然后它会一直运行,直到它达到100%(endRotation)

这不一定是您应该使用的代码,但它应该说明如何使用计时器随时间增加值


编辑以使lerp函数的功能更加清晰:

double lerp(double start, double end, double percentage)
{
    return start + ((end - start) * percentage);
}
想象一下,从4到125,每10%我们称之为这个。我们将得到以下结果:

0%    4
10%   16.1
20%   28.2
30%   40.3
40%   52.4
50%   64.5
60%   76.6
70%   88.7
80%   100.8
90%   112.9
100%  125

(float)0.016
替换为计时器外部的变量,并在每次计时器启动时向其添加
0.016
。@John Ok,但您能给出一个我可以使用的计时器示例吗?我对这个计时器很困惑。我不知道是否有一个特定的计时器可以给你总的运行时间。该死,这就是这里要问的问题,如何创建这个计时器。这太疯狂了,好像它不存在于统一之外。嗯,好吧,我来试试,我会让你知道的。谢谢。@Kevin对不起,那是我的错别字。它应该是
+=
而不是
=
。此解决方案将项目移动到endPos的一小部分,然后立即将其移回startPos。我不确定你为什么要通过
startRotation
endRotation
(即开始=物体开始移动前的位置,结束=物体停止移动时的位置)?是的,从上面看它们是一样的。model.rotation是开始,model.rotationM是结束。我将它们更改为您示例中的值。
model.rotationM=Vector3.Lerp(model.rotation,model.rotationM,lerpFactor)
是100%错误的。想想看:Lerp(S,E,0.1)…Lerp(0,10,0.1)->得到1。现在,变量(e)先前保持10,您将其重新指定为保持1。然后调用Lerp(s,e,0.2)。。。Lerp(0,1,0.2)->得到0.2,然后重新分配它以保持0.2。你称之为Lerp(s,e,0.3)。。。Lerp(0,0.2,0.3)->得到0.06。原因是您不断地将结束位置移近开始位置,这意味着第三个参数所代表的总体百分比越来越小。
double lerp(double start, double end, double percentage)
{
    return start + ((end - start) * percentage);
}
0%    4
10%   16.1
20%   28.2
30%   40.3
40%   52.4
50%   64.5
60%   76.6
70%   88.7
80%   100.8
90%   112.9
100%  125