C# Vector3.Lerp Unity3D期间的目标更改

C# Vector3.Lerp Unity3D期间的目标更改,c#,unity3d,C#,Unity3d,我正在使用Vector3.Lerp在我的玩家游戏对象之后移动我的相机。由于我的游戏机制,我的玩家游戏对象的位置可以“传送”和跳跃两个向量,这会改变相机的目标位置 这是由于目标位置在LERP的中部发生变化而引起的口吃,并且由于LERP的中间位置改变了LERP的目标位置,导致相机跳/萨特。 我如何解释这一点,并使相机平稳地移动到新位置“对于lerp,您要传递开始、结束和要在其之间插值的百分比 听起来像是在lerp中更改结束。您需要做的是计算当前相机位置在新开始/结束中的百分比,并更新百分比值以适应

我正在使用Vector3.Lerp在我的玩家游戏对象之后移动我的相机。由于我的游戏机制,我的玩家游戏对象的位置可以“传送”和跳跃两个向量,这会改变相机的目标位置

这是由于目标位置在LERP的中部发生变化而引起的口吃,并且由于LERP的中间位置改变了LERP的目标位置,导致相机跳/萨特。


我如何解释这一点,并使相机平稳地移动到新位置“

对于lerp,您要传递开始、结束和要在其之间插值的百分比

听起来像是在lerp中更改结束。您需要做的是计算当前相机位置在新开始/结束中的百分比,并更新百分比值以适应

例:

如果将当前值设置为5,则在0-10之间选择的百分比为0.5。如果将端点更改为20,则现在需要将百分比设置为0.25,以避免结巴


另一种方法是作弊,在当前(而不是开始)和目标之间始终保持lerp,百分比为0.9(根据需要调整)。这会滥用lerp,但会给您带来一个轻松的副作用,如果您的位置更新很小,这应该足够好。

您可以使用设定的速率将相机移向播放机,而不是基于两者之间的百分比的正常a到B位置lerp

cameraTransform.position = Vector3.Lerp(cameraTransform.position, player.position, Time.deltaTime * moveSpeed);

虽然这不会达到1(假设moveSpeed小于1/deltaTime),但它会使您的相机平稳地朝着目标移动。

为什么不使用
Vector3.MoveToward();