2016-10-27 12 views
0

Cで文字ジャンプを実装しようとしています しかし、私は彼にジャンプボタンを押したままにする方法によって、異なる高さにジャンプします。
たとえば、瞬時にスペースをヒットした場合、あなたはあまりにも高くジャンプしません 反対に、キャラクターは高くジャンプしますが、高さは高くなります。私は右のジャンプの途中で力を追加しようとしているUnity5:2D Platformer:異なる高さでジャンプする

private Rigidbody2D rb; 
private Transform lowerPoint; 
private new SpriteRenderer renderer; 
private Animator anim; 
private Transform spawPosition; 

[SerializeField] 
float speed = 3f; 
[SerializeField] 
float jumpForce = 3f; 
[SerializeField] 
Image backgroundImage; 
[SerializeField] 
LayeredSpikes script; 

float secondJumpForce; 
[SerializeField] 
float additionalVelocity; 
const float ADDITION_VELOCITY_LIMIT = 0.9f; 

bool isGrounded; 
bool isAlive; 
bool hasSecondJump; 

void Awake() 
{ 
    rb = GetComponent<Rigidbody2D>(); 
    renderer = GetComponent<SpriteRenderer>(); 
    lowerPoint = GetComponentInChildren<Transform>(); 
    anim = GetComponent<Animator>(); 
    spawPosition = GameObject.FindGameObjectsWithTag ("Respawn")[0].GetComponent<Transform>(); 
} 
void Start() 
{ 
    ResetVelocity(); 
    isGrounded = false; 
    isAlive = true; 
    hasSecondJump = true; 
    Spawn(); 
    secondJumpForce = jumpForce * 0.75f; 
} 

void Update() 
{ 
    if (isAlive) 
    { 
     if (isGrounded) 
     { 
      AnimState = AnimationState.Idle; 
      hasSecondJump = true; 
      additionalVelocity = 0f; 
     } 

     if (Input.GetButtonDown ("Jump")) 
     { 
      Jump(); 
     } 

     if (Input.GetButton ("Jump") 
      && additionalVelocity <= ADDITION_VELOCITY_LIMIT) 
     { 
      additionalVelocity += ADDITION_VELOCITY_LIMIT/3; 
      rb.AddForce(Vector2.up * additionalVelocity); 
     } 

     if (Input.GetButton ("Horizontal")) 
     { 
      Run(); 
     } 
    } 
} 

private void Jump() 
{ 
    AnimState = AnimationState.Jump; 
    float force; 

    if (isGrounded) 
    { 
     force = jumpForce; 
    } 
    else 
    { 
     if (hasSecondJump) 
     { 
      ResetVelocity(); 
      force = secondJumpForce; 
      hasSecondJump = false; 
     } 
     else 
     { 
      force = 0f; 
     } 
    } 
    rb.AddForce (Vector2.up * force, ForceMode2D.Impulse); 
    if (force != 0f) 
    { 
     //script.Trigger(); 
    } 
} 

void ResetVelocity() 
{ 
    rb.velocity = Vector2.zero; 
    additionalVelocity = 0f; 
} 

、ない結果:
はここに私のコードです。一見、私はあなたのブール変数を接地さ

答えて

4

を観察することができ、常にある偽。 この問題は、実際に動作する2回目のジャンプですが、最初のジャンプではないので、難しいです。なぜそれを検出するのが難しいのですか?

設定し、あなたのスタート()のデフォルト、およびあなたが最初のジャンプを作るときに、接地されている= を設定するなど接地されている= 変数。

次に、あなたのキャラクターがバックグラウンドにあるときを検出するためにコライダーを使用することができ、もしそうなら、あなたは変数国民がを接地され接地されている、あなたのようにする必要があります。

希望すると助かりました。

  • ノエ
+0

まあ、プレイヤーがジャンプすることができ、私がチェックしました。レベルプレーヤーの最初の段階では、スポーンポジションは空中にあり、問題はありません。 私は自分の問題を説明できないかもしれないので、理解することができます。キャラクターはスムーズに動くことができますが、固定された高さにしかありません。 2番目のジャンプと同じ状況。 ジャンプボタンを少し押してプレイヤーが少しジャンプすることができたらいいと思いますが、スペースを押すたびにキャラクターが同じ力で空中に浮かびます。これが私がアップグレードしたいものです。 ありがとう(: –

+0

私は忘れているかもしれませんが、FixedUpdateメソッドがあり、Physics2Dクラスを使用して文字が接地されているかどうかを確認します) なぜここに記載されていないのか分かりません。 –

関連する問題