2016-06-27 5 views
0

私はUnityフォーラムでこの質問をしましたが、SOよりはるかに人口が少ないように見えますが、私は受け入れられる回答を得られませんでした。質問は以下の通りです:私のゲーム(Unityで作ったC#)では、私は物理学(Rigidbody2D)とaddForceを使って航空機を加速します。加えられる力は推力に比例する。Unity2Dで航空機の加速を滑らかにする(減速させる)方法は?

問題は次のとおりです。多くの力を加えると、現実的に高速に非現実的にすばやく到達します。力をあまり加えなければ、現実的な加速がありますが、カタツムリの最高速度です。私はドラッグで試してみましたが、方程式は次のようになります。質量の増加は加速を遅くしますが、それに比例して最大速度を減少させます。

私が今やっていることは、加速を管理可能なレベルに制限するために、プレーヤーのスピードに応じていくつかの抗力方程式を持っていますが、それは非常にclunkyです(直感的で非現実的です)。

はここに私のコードの抜粋です:次のようにキロ単位から

//////////////////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字型関数"を探知し、このケースには絶対に完璧な "シグモイド"関数を見つけました! 1時間くらいかかりましたが、似たような問題を抱えている人に役立つかもしれません。6 /(1 + e ^(0.18(x-0.5)))+ 0.35。 – flanker37

+0

それは素晴らしいです、私はうまくいってうれしいです!方程式を共有していただきありがとうございます。私は自分自身を見てください。haha – meepzh

答えて

0

meepzhのアイデアのおかげで、私が働いて解決策を見つけることができました。私は「シグモイド」機能を発見し、ここで私の場合には素晴らしい作品式だ:6/(1+e^(0.18(x-0.5)))+0.35.

関連する問題