我在Unity论坛上问了这个问题,但是它们似乎比SO少得多,我没有得到一个可接受的答案。问题如下:在我的游戏(Unity,C#制作)中,我使用物理(Rigidbody2D)和addForce来加速飞机。增加的力与推力成正比。
问题是:如果我增加了很多力量,我会以不切实际的速度快速达到逼真的高速度。如果我增加力量,我会有逼真的加速度,但是蜗牛可以使用。最高速度。我尝试用拖拽来玩,但是这个方程式自我平衡:减少两倍的力,减少两倍的力,产生相同的加速度和最高速度。增加质量会减慢加速度,但会按比例降低最大速度。
我现在正在做的是根据玩家的速度制定几个阻力方程式,将加速度限制在可控制的水平,但感觉非常笨重(更不用说不直观和不切实际)。
以下是我的代码片段:
//////////////////Adding thrust/////////////////////////////
rb.AddForce(transform.right*thrust); //thrust goes from 0 to 100
//////////////////Drag equations/////////////////////////////
if (rb.velocity.magnitude <= 3)
rb.drag = Mathf.Clamp(-rb.velocity.magnitude / 8f + 4f, 2.1f, 4f);
else if (rb.velocity.magnitude <= 4)
rb.drag = Mathf.Clamp(-rb.velocity.magnitude / 4.9f + 4f, 2.1f, 4f);
else if (rb.velocity.magnitude <= 7)
rb.drag = Mathf.Clamp(-rb.velocity.magnitude / 2.9f + 4.15f, 1.1f, 4f);
else if (rb.velocity.magnitude <= 10)
rb.drag = Mathf.Clamp(-rb.velocity.magnitude / 5f + 3.2f, 1f, 4f);
else
rb.drag = Mathf.Clamp(-rb.velocity.magnitude / 18f + 1.7f, 0.8f, 4f);
从单位到km / h的速度转换如下:
speedText.text = "Speed: " + Mathf.Round(rb.velocity.magnitude * 50 * 3.6f) + "km/h";
所以rb.velocity.magnitude为7是1260 km / h。
如果没有我的阻力方程,飞行器几乎可以立即提升到2500km / h,或者慢慢加速到500km / h并停留在那里。我错过了什么吗?如何才能获得最高速度和慢加速度?
提前谢谢。
答案 0 :(得分:0)
感谢meepzh的想法,我找到了一个可行的解决方案:我找到了一个“sigmoid”函数,这里的方程式在我的案例中很有用:6/(1+e^(0.18(x-0.5)))+0.35.