【问题标题】:Changing a projectile's speed based on the target distance in Unity根据 Unity 中的目标距离更改弹丸的速度
【发布时间】:2020-08-24 04:20:22
【问题描述】:

我有一个射向玩家的弹丸,但我希望能够根据它必须行进的距离调整它的速度。

变换变量是:

  • playerTransform -> 玩家的变换仅在射弹发射时更新一次
  • firePoint -> 火点的变换;产生弹丸的地方

射弹从火点开始,到达 playerTransform 时被摧毁

speedMultiplier 的初始值为 1,但应根据玩家的距离更改为 0.5 到 1.5 之间的值。

  • 如果玩家的 X 位置为 -7.5 或更小,则 speedMultiplier 应为 0.5f
  • 如果玩家的 X 位置为 4 或更多,则速度乘数应为 1.5f
// This is called every time a projectile is fired

float speedMultiplier = 1f; 
speedMultiplier = FORMULA TO CALCULATE HOW MUCH THE SPEED SHOULD CHANGE; // Should be between 0.5 and 1.5
projectileSpeed *= speedMultiplier; 

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您可以使用Mathf.lerp(a, b, t)。 lerp 方法基于第三个参数在两个值之间进行线性插值。将最后一个参数视为百分比。

    例如:

    Math.lerp(0.0f,10.0f,0.0f); //Will yield 0 because 0 is 0% between 0 and 10
    Math.lerp(0.0f,10.0f,0.5f); //Will yield 5 because 5 is 50% between 0 and 10
    Math.lerp(0.0f,10.0f,1.0f); //Will yield 10 because 10 is 100% between 0 and 10
    

    因此,对于您的示例,您可以根据 x 位置进行 lerp,但您需要将其缩放到 0 和 1 之间(0 表示 x = -7.5 和 1 表示 x = 4)。

    float t = Mathf.clamp01((transform.position.x + 7.5) / (4 + 7.5));
    

    Mathf.clamp01(x) 方法只是将数字夹在 0 或 1 之间。

    现在只是在速度之间徘徊:

    Mathf.lerp(0.5f, 1.5f, t);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多