【问题标题】:How to smooth (slow down) aircraft acceleration in Unity2D?如何在 Unity2D 中平滑(减慢)飞机加速?
【发布时间】:2016-06-27 21:55:03
【问题描述】:

我在 Unity 论坛上提出了这个问题,但他们的人数似乎比 SO 少得多,而且我没有得到可接受的答案。问题如下:在我的游戏(Unity,C#制作)中,我使用物理(Rigidbody2D)和addForce来加速飞机。增加的力与推力成正比。

问题是:如果我增加了很多力量,我会以不切实际的速度快速达到现实的高速。如果我增加较少的力,我会有真实的加速度,但蜗牛的最高速度。我试着玩阻力,但等式自己平衡了:减少两倍的力和减少两倍的阻力会产生相同的加速度和最高速度。增加质量会减慢加速度,但会成比例地降低最大速度。

我现在所做的是根据玩家的速度制定几个阻力方程,以将加速度限制在可管理的水平,但感觉非常笨拙(更不用说不直观和不切实际)。

这是我的代码的 sn-ps:

 //////////////////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";

所以 7 的 rb.velocity.magnitude 是 1260 公里/小时。

没有我的阻力方程,飞行器要么几乎立即加速到 2500 公里/小时,要么缓慢加速到 500 公里/小时并保持在那里。我错过了什么吗?我怎样才能有高的最高速度和慢的加速?

提前谢谢你。

【问题讨论】:

  • 我认为后一种选择(“缓慢加速到 500 公里/小时并停留在那里”)是您想要的,但这是调整值的问题。如果您想避免使用 if 语句,请尝试使用不同的方程式来乘以阻力或速度。例如,i.imgur.com/FACzbsQ.png。您也可以使用log()sqrt(),但它们很慢。祝你好运!
  • 哇,伙计,你的想法完全奏效了!太感谢了!所以,你说我的阻力方程想法总体上是正确的,并提供了一个很好的启动函数。但它并不完美,所以我搜索了“S形函数”,发现了一个“sigmoid”函数,这对于这种情况来说绝对是完美的!经过一个小时左右的修修补补,我发现这个形状对我很有用(也许它会帮助有类似问题的人):6/(1+e^(0.18(x-0.5)))+0.35。
  • 太棒了,我很高兴它成功了!感谢您分享方程式,我得自己研究一下哈哈
  • @flanker37 你应该添加你的方程式作为答案并接受它,这样人们会更容易看到你找到了解决方案。

标签: physics unity3d-2dtools


【解决方案1】:

多亏了 meepzh 的想法,我找到了一个可行的解决方案:我找到了一个“sigmoid”函数,这是对我来说效果很好的方程:6/(1+e^(0.18(x-0.5)))+0.35.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多