C# 根据玩家HP获得移动速度

C# 根据玩家HP获得移动速度,c#,unity3d,C#,Unity3d,我希望玩家的速度受速度的影响,例如,如果20马力是最大值,20马力时玩家的速度将为10,但如果达到5,它将插值到最大值和最小值之间 我听说过mathf.Lerp,但我没有得到预期的结果。有什么建议吗 private void CalculateMovementAttackSpeed() { movementSpeed = Mathf.Lerp(10, 5, this.hp); Debug.Log(movementSpeed); } 10是玩

我希望玩家的速度受速度的影响,例如,如果20马力是最大值,20马力时玩家的速度将为10,但如果达到5,它将插值到最大值和最小值之间

我听说过mathf.Lerp,但我没有得到预期的结果。有什么建议吗

   private void CalculateMovementAttackSpeed()
    {
        movementSpeed = Mathf.Lerp(10, 5, this.hp);
        Debug.Log(movementSpeed);
    }

10是玩家可以达到的最大移动速度,5是最小移动速度。

听起来你可能需要重新映射,而不是在两个数字之间插值

public static float Remap (this float value, float from1, float to1, float from2, float to2) 
{
    return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
}
然后您可以从健康状态中获得所需的速度(其中20为最大生命值,10为最大速度):


Mathf.Lerp
的第三个值应该是介于0和1之间的十进制数。尝试执行此.hp/20
,或者您的最大hp值。我所看到的文档确实提供了任何信息,但我确实找到了一个unity答案帖子,这可能会奏效。@ChilliPenguin!谢谢你的回答,它比另一个答案更精确!对于这个例子来说,它很好,但是如果我们有更多的值,方法参数会不会太大?
private void CalculateMovementAttackSpeed()
{
    movementSpeed = Remap(this.hp, 0f, 20f, 5f, 10f);
    Debug.Log(movementSpeed);
}