2016-06-27 71 views
0

我在Unity论坛上问过这个问题,但他们看起来比人口少得多,我没有得到一个可以接受的答案。问题如下:在我的游戏(由Unity,C#制作)中,我使用物理(Rigidbody2D)和addForce来加速飞机。增加的力与推力成正比。如何在Unity2D中平滑(减慢)飞机加速度?

问题是:如果我增加了很多力量,我会很快达到逼真的高速度。如果我减少力量,我会有逼真的加速度,但蜗牛的最高速度。我尝试着用拖动来玩,但是这个方程式变得更加平稳:减少两倍的力量,减少两倍的阻力,产生相同的加速度和最高速度。增加质量会加速加速,但会按比例降低最大速度。

我现在正在做的是根据玩家的速度将几个阻力方程式限制在可控范围内,但感觉非常笨重(更不用说不直观和不现实)。

这里是我的代码片段:从单位公里

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

速度转换/ h为如下:

speedText.text = "Speed: " + Mathf.Round(rb.velocity.magnitude * 50 * 3.6f) + "km/h"; 

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

如果没有我的阻力公式,该技术几乎可以立即提升到2500km/h,或者缓慢加速到500km/h并停留在那里。我错过了什么吗?我怎样才能获得高速和慢速加速?

预先感谢您。

+0

我认为后一种选择(“慢慢加速到500km/h并停留在那里“)是你想要的,但这是一个调整价值的问题。如果你想避免if语句,试着用不同的方程来演奏你的拖拽或速度乘以。例如,http://i.imgur.com/FACzbsQ.png。你也可以使用'log()'和'sqrt()',但这些很慢。祝你好运! – meepzh

+0

哇,伙伴,你的想法完全奏效!非常感谢!所以,你说我的阻力方程式的想法一般是正确的,并提供了一个不错的入门功能。但它并不完美,所以我搜索了“S形功能”,并发现了一个“S形功能”,这对于这种情况来说绝对是完美的!经过一个小时左右的修补,我发现这个形状对我很好(可能会帮助有类似问题的人):6 /(1 + e ^(0.18(x-0.5)))+ 0.35。 – flanker37

+0

太棒了,我很高兴它解决了!感谢分享这个等式,我得仔细研究一下自己哈哈 – meepzh

回答

0

由于meepzh的想法,我能找到一个有效的解决方案:我发现了一个“S形”的功能,下面的工作在我的情况下,巨大的公式:6/(1+e^(0.18(x-0.5)))+0.35.