2014-10-23 2 views
0

Прямо сейчас я не получаю много из этого. В зависимости от того, что я делаю, я либо заканчиваю бесконечным циклом, либо плохая способность прыгать. Я использовал таймер, чтобы пометить мой прыгающий bool, но у меня была двойная способность прыгать, и мое обнаружение земли было недостаточно хорошим. Вы видите, почему я не могу прыгать или прыгать хорошо?Почему я не могу прыгать или прыгать хорошо?

using UnityEngine; 
using System.Collections; 

public class player : MonoBehaviour 
{ 
    public float speed = 0.05f; 
    public float jumpVelocity = 0.05f; 
    public bool onGround = true; 
    public bool jumped = false; 

    // Use this for initialization 
    void Start() { } 

    // Update is called once per frame 
    void Update() 
    { 
     //test if player is on the ground 
     if (onGround) { jumped = false; } 

     // USER CONTROLS HERE. 
     if (Input.GetKeyDown(KeyCode.Space) && onGround == true) 
     { 
      jumped = true; 

      while(jumped) 
      { 
       this.rigidbody2D.AddForce(new Vector2(0, jumpVelocity)); 

       if (onGround) { jumped = false; } 
      } 
     } 
     else if (Input.GetKey(KeyCode.RightArrow)) 
     { 
      this.transform.position += Vector3.right * speed * Time.deltaTime; 
     } 
     else if (Input.GetKey(KeyCode.LeftArrow)) 
     { 
      this.transform.position += Vector3.left * speed * Time.deltaTime; 
     } 
    } 

    void OnCollisionEnter2D(Collision2D col) 
    { 
     if(col.gameObject.tag == "floor") { onGround = true; } 
    } 

    void OnCollisionStay2D(Collision2D col) 
    {  
     if(col.gameObject.tag == "floor") { onGround = true; } 
    } 
} 

ответ

1

Ваша проблема связана с непониманием того, как работают метод Update и физика. Если вы делаете это в методе обновления, он будет создавать бесконечный цикл:

while(jumped) 
{ 
    this.rigidbody2D.AddForce(new Vector2(0, jumpVelocity)); 

    if(onGround) 
    { 
     jumped = false; 
    } 
} 

Дело в том, что вы говорите тело физики, чтобы добавить силу. Но вы продолжаете делать это снова и снова. Физическое моделирование происходит только после Метод Update возвращает, поэтому любой из них «onGround» никогда не станет истинным, потому что силы не применяются до тех пор, пока не будет применен метод Update.

Вместо этого вы должны делать эту проверку снова и снова при каждом запуске метода Update до тех пор, пока onGround не будет истинным.

+0

Извините, я вас только понял. Я не слишком быстро с этим материалом ... Я использовал таймер, чтобы отключить прыгающий в цикле while. Это позволяло мне летать в воздухе, но иногда я мог совершать двойной прыжок ... и мог только прыгать в определенное время ... была одна плитка, от которой я не мог прыгать ... ммм ... вы не знаете никаких хороших ресурсов на этом? – user2296112

+0

О, стрелять. Я получаю ... Я прохожу через петлю, видя, что игрок находится на земле, никакая сила не добавлена ​​... хм ... – user2296112

+0

Я понял это. Кирпич, который вызывал у меня проблемы, был помечен «8» вместо «пола». Я присваивал свой первый тег и видел числа, выглядел как индексы массивов .. не знал, что я делаю ... думаю, я пропустил эту плитку после выяснения ее. – user2296112

Смежные вопросы