【发布时间】:2020-02-20 21:31:24
【问题描述】:
我正在开发一个带球的简单 3D 游戏。而且球移动不顺畅。
while (i < Input.touchCount)
{
if(Input.GetTouch(i).position.y < ScreenHeight / 2)
{
if (Input.GetTouch(i).position.x > ScreenWidth / 2)
{
//move right
rigidBody.velocity += new Vector3(0.75f, 0, 0);
}
if (Input.GetTouch(i).position.x < ScreenWidth / 2)
{
//move left
rigidBody.velocity -= new Vector3(0.75f, 0, 0);
}
}
++i;
}
如您所见,我使用了刚体的速度,它开始缓慢,然后快速移动。但我希望球在触摸屏幕后立即以恒定速度移动。 它也随着抽搐而移动,并不顺利。 你能帮我改进一下吗?
【问题讨论】:
-
如果您希望它以恒定速度移动,您应该使用常规分配:
=而不是-=和+=。所以应该是rigidBody.velocity = new Vector(x,y,z) -
我不得不提一下,球只是停留在原地,只在 x 轴上移动。
-
它不在 y 轴上移动,因为向量中的 Y 值为 0
-
值得一提的是,球是使用刚体的,所以物理学会发挥作用。每帧上的所有 += 和 -=(除非 GetTouch 类似于 GetKeyDown)可能也不理想,因为它会继续加速球。我建议按照@Chronicle 说的做,然后可能进入刚体属性并将球设置为运动学,这样外力就不会与之相互作用。
-
嗨,@Davrick 考虑使用 Lerping 以使动作平稳运行,请参阅 docs.unity3d.com/ScriptReference/Vector3.Lerp.html