2017-12-23 25 views
2

私はユニティに新しく、CharacterController.Moveを使って私のキャラクターを動かす。私のゲームの世界では、1ユニット= 1メートルです。 これは素晴らしいです。例えばスピードの場合:スピード5を使用すると、スピードは5m/sになります。ジャンプの高さと重力の重さ

私が使用して自分のキャラクターをジャンプさせる:

if (Input.GetButton("Jump")) 
moveDirection.y = jumpHeight; 
... 
moveDirection.y -= gravity * Time.deltaTime; 

これはあまりにも正常に動作しますが、重力が私の性格をプルダウンされているので、jumpHeightが実際に達していません。たとえば、jumpHeightが8の場合、約2.4メートルのジャンプが発生します。

jumpHeightは、重力が落ちてもジャンプする高さを表しますので、コードを変更するにはどうすればよいですか?基本的に、jumpHeightが8の場合、私はプレイヤーに8メートルのジャンプをさせたい。

物理学によれば、初期速度8で、高さは1.6で重力20(height = initialvelocity^2/(2*gravity))です。これが確かに私がゲームで見ている高さであれば、私は単純に数式を変換することができますが、私は約2.4メートルの高さを見ています...

+0

あなたはvector3.slerpを使用して、いくつかの解決策について考えたことがあります? – Asbest

答えて

0

あなたは正しい道を歩いています。私はあなたがSUVAT方程式を知っていると仮定しています。

私たちの知られているものはジャンプハイト(8)とtimeToJumpApex(0.5f)<です。これは何でも変更できますが、0.5fが良いスタートです。

頂点をジャンプする時間は、その名前が示すとおり、ジャンプの頂点に当たるのにかかる時間です。

ここで、必要な残りの変数、重力、ジャンプ速度を解く必要があります。重力は、次のように定義できます。

gravity = 2 * jumpheight/timeToJumpApex^2; 

ジャンプ速度は、次のように定義できます。

jumpVelocity = gravity * timeToJumpApex; 

次に、あなたが行うことができます:

if (Input.GetButton("Jump")) 
moveDirection.y = jumpVelocity; 
... 
moveDirection.y -= gravity * Time.deltaTime; 
関連する問題