Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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 Unity 5.6_C#_Unity3d_Lerp - Fatal编程技术网

C# 改变矢量中的移动速度。Lerp Unity 5.6

C# 改变矢量中的移动速度。Lerp Unity 5.6,c#,unity3d,lerp,C#,Unity3d,Lerp,我在unity游戏中使用Vector3.Lerp简单地将游戏对象从一个位置平滑地移动到另一个位置。下面是我的代码: 公共类玩家移动:单一行为{ 公共浮点数duringlerp=2f; 私人住宅; 专用矢量3_起始位置; 私有向量3_末端位置; 私人浮动_timeStartedLerping; 虚空惊悚(int i) { _isLerping=true; _timeStartedLerping=Time.Time;//在此处向Time.Time添加1会使其在启动前等待1秒 //我们将开始位置设置为

我在unity游戏中使用Vector3.Lerp简单地将游戏对象从一个位置平滑地移动到另一个位置。下面是我的代码:

公共类玩家移动:单一行为{
公共浮点数duringlerp=2f;
私人住宅;
专用矢量3_起始位置;
私有向量3_末端位置;
私人浮动_timeStartedLerping;
虚空惊悚(int i)
{
_isLerping=true;
_timeStartedLerping=Time.Time;//在此处向Time.Time添加1会使其在启动前等待1秒
//我们将开始位置设置为当前位置,结束位置设置为“前进”方向上的10个空格
_startPosition=transform.position;
_endPosition=新矢量3(transform.position.x+i,transform.position.y,transform.position.z);
}
无效更新()
{
//当用户点击空格键时,我们开始选择
if(Input.GetKey(KeyCode.Space))
{
int i=65;
惊人的(一);
}
}
//我们在FixedUpdate()中进行实际插值,因为我们处理的是刚体
void FixedUpdate()
{
如果(_isLerping)
{
//当Time.Time=\u timeStartedLerping时,我们希望百分比为0.0
//当Time.Time=\u timeStartedLerping+timeTakenDuringLerp时,百分比=1.0
//换句话说,我们想知道“timeTakenDuringLerp”值的百分比是多少
//“Time.Time-_timeStartedLerping”是。
float timessurestarted=Time.Time-\u timeStartedLerping;
float percentage complete=已开始的时间/已完成的时间;
//执行实际的lerping。请注意,前两个参数始终相同
//在单个lerp过程中(即,在我们再次点击空格键之前,它们不会改变)
//启动另一个lerp)
transform.position=Vector3.Lerp(_开始位置,_结束位置,完成百分比);
//完成lerp后,我们将_isLerping设置为false
如果(完成百分比>=1.0f)
{
_isLerping=false;
}
}
}
}
代码运行良好,游戏对象在两点之间平稳移动。但到达目的地大约需要1秒钟。我想让它移动得更快。我已经尝试降低float timeTakenDuringLerp的值,但是速度没有受到影响。我已经按照上面的解释做了,解释中也提到了改变timeTakenDuringLerp变量以改变速度,但它在这里不起作用

有什么建议吗?

解决办法是


percentage complete
值乘以
speed
值,如下所示:

transform.position = Vector3.Lerp (_startPosition, _endPosition, percentageComplete*speed); 

因此,当你提高
速度时,它会跑得更快。

H℮y、 谢谢你链接到我的博客

减少
时间duringlerp
是正确的解决方案。这减少了对象从开始到结束移动所需的时间,这是“它提高了速度”的另一种说法

如果您希望对象以特定的速度移动,则需要将
timeTakenDuringLerp
设置为变量而不是常量,并将其设置为
距离/速度
。或者更好的是,根本不要使用
Lerp
,而是设置对象的
速度
,让Unity的物理引擎来处理它

按照@Thathanas的建议,将
percentageComplete
乘以常数是不正确的。这会导致lerping更新在lerping完成后继续发生。这也使得代码很难理解,因为
timeTakenDuringLerp
不再是lerp过程中花费的时间


我已经仔细检查了我的代码,它确实有效,所以您遇到的问题肯定在其他地方。或者可能您意外地增加了时间,这会降低速度?

percentageComplete
值乘以
速度
值,如
transform.position=Vector3.Lerp(_startPosition,_endPosition,percentageComplete*speed)所以当你提高速度时,它会更快。如果您使用的是percentageComplete,则它不是固溶体elsewhere@Thalthanas谢谢。它工作得很好,谢谢你说得很清楚。这实际上是一个减少时间的正确答案。用percentageComplete乘以一个变量的另一个答案也有效,但当然是的,那么timeTakenDuringLerp在改变速度方面不会起任何作用。事实上,我一开始试着改变计时器,但不知道为什么那个时候它不起作用。不管怎样,谢谢你的帮助,它现在正按需要工作