2016-10-27 5 views
0

Ich versuche, Zeichensprung in C# zu implementieren Aber ich möchte, dass er auf unterschiedliche Höhe springt, hängt davon ab, wie Sie einen Sprung-Knopf halten.
Zum Beispiel, wenn Sie sofort Raum drücken - Sie springen nicht so hoch Im Gegenteil - der Charakter wird höher springen, aber auf begrenztem High.
Hier ist mein Code:Unity5: 2D Platformer: Springen mit unterschiedlicher Höhe

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; 
} 

Ich versuche Kraft direkt in der Mitte des Sprungs hinzuzufügen, aber kein Ergebnis. immer falsch ist

Antwort

4

Auf den ersten Blick kann ich Ihre Bool Variable isGrounded beobachten. Dieses Problem war schwierig, weil es Ihr zweiter Sprung ist, der wirklich funktioniert, aber nicht Ihr erster Sprung, deshalb hatten Sie Schwierigkeiten, es zu entdecken!

Stellen Sie Ihre Variable isGrounded = wahr bereits als Standard auf Start(), und dann, wenn Sie Ihren ersten Sprung zu machen, setzen isGrounded = falsch.

Sie können dann Colliders verwenden, um festzustellen, wenn Ihr Charakter wieder auf dem Boden ist, und wenn ja, werden Sie Ihre isGrounded Variable öffentliche isGrounded vornehmen müssen.

Ich hoffe, ich konnte helfen!

  • Noe
+0

Nun, Spieler springen kann, habe ich gecheckt. Zu Beginn des Levels ist die Spawnposition des Spielers in der Luft und es gibt kein Problem damit. Vielleicht kann ich mein Problem nicht beschreiben, damit Sie es verstehen können. Charakter kann jum, aber nur auf einer festen Höhe. Die gleiche Situation mit dem zweiten Sprung. Ich wünschte, ich könnte den Sprungknopf leicht drücken und der Spieler springt ein wenig, aber jedes Mal, wenn ich auf das Feld drücke, steigt der Charakter mit der gleichen Kraft in die Luft, und das ist es, was ich aufwerten möchte. Aber danke (: –

+0

Ich kann vergessen, aber es gibt eine FixedUpdate-Methode, wo ich überprüfe, ob das Zeichen geerdet ist, Physik2D Klasse Ich weiß nicht, warum hier nicht erwähnt wird. –

Verwandte Themen