2016-03-07 3 views
0

Я делаю 2D-платформенную игру в Untiy для Android, и у меня есть некоторые проблемы с разделом кода, который у меня есть. Когда я прыгаю на платформу, я в первый раз могу приземлиться на платформу, но когда я снова прыгаю, я падаю через платформу. У меня это так, что коллайдер коробки неактивен, если игрок меньше высоты платформы и активен, когда игрок выше платформы. Я думал, что коллайдер коробки был маленьким, и он просто не пропускал коллайдер, поэтому я пробовал разные размеры коллайдеров, и я попытался настроить разные высоты, с которыми он активируется. Также, когда я устанавливаю высоту на низкий, игрок совершает двойной прыжок. Так что я делаю неправильно?Прыжки на платформу

public class Rock : MonoBehaviour 
{ 
    private BoxCollider2D platform; 
    private PlayerScript player; 

    public float height; 

    void Awake() { 
     player = GameObject.Find("Player").GetComponent<PlayerScript>(); 
     platform = GetComponent<BoxCollider2D>(); 
    } 

    void Start() { 
     platform.enabled = false; 
    } 

    // Update is called once per frame 
    void Update() { 
     if(player.transform.position.y > height){ 
      platform.enabled = true; 
     } else if(player.transform.position.y < height){ 
      platform.enabled = false; 
     } 
    } 
} 
+0

Не могу видеть здесь ничего плохого. Что такое высота? это высота скалы или это положение скалы в мировом пространстве? Не можете ли вы просто сделать что-то вроде: 'player.transform.position.y> transform.position.y'? –

+0

Высота - это положение скалы в мировом пространстве. – Papaskippy

+0

когда я делаю 'player.transform.position.y> transform.position.y' игрок делает супер прыжок не то, что я хочу – Papaskippy

ответ

0

Может быть, что вы не закрываете случай, когда player.transform.position.y == height? Я вижу, что вы проверяете большее/меньшее, чем height, но не равенство. Это может привести к нежелательному поведению, подобному тому, которое вы описываете.

Дайте мне знать, если это проблема.

+0

no все еще делаю то же самое спасибо хотя – Papaskippy

+0

Bummer, удачи! –

0

Этот код действительно работал. Проблема закончилась тем, что была в моем игроком, где я добавил кусок кода, где у меня была ошибка, если бы вы держали кнопку перехода вниз, игрок застрял бы в анимации перехода.

void OnCollisionStay2D(Collision2D target) { 
    if (target.gameObject.tag == "Ground") { 
     grounded = true; 
     anim.SetBool("Jump",false); 
    } 

} 


public void Jump() { 
    if(grounded){ 
     grounded = false; 
     anim.SetBool("Jump",true); 
     myBody.velocity = new Vector2(myBody.velocity.x, 0); 
     myBody.AddForce(new Vector2(0, jumpForce)); 
    } 
} 

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

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