Проблема Unity Tag и Collider во время прыжка игрока - PullRequest
0 голосов
/ 06 июня 2019

Это код прыжка моего игрока:

void Update()
{
    float oldmoveHorizontal = moveHorizontal;
    moveHorizontal = Joystick.Horizontal;
    moveVertical = Joystick.Vertical;    

    if (isJumping == false && moveVertical >= .7f)
    {
        moveVertical = Speed * 70;
        isJumping = true;
    }

    ball_move = new Vector2(moveHorizontal, moveVertical);         
    ball_rigid.AddForce(ball_move);

    void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.tag == "Ground")
         {
             isJumping = false;
         }        
    }
}

Когда мяч касается коллайдера, он может снова прыгнуть.Как я могу заблокировать эту ситуацию?this is image

, если вы не можете скачать: https://ibb.co/yVgXmrM

Ответы [ 2 ]

1 голос
/ 07 июня 2019
void OnCollisionEnter2D(Collision2D col)
{
    if (col.gameObject.tag == "Ground")
    {
        foreach (ContactPoint2D item in col.contacts)
        {
            Debug.Log("Normal:" + item.normal);
            if (item.normal.y > 0 && col.gameObject.tag == "Ground")
            {
                isJumping = false;
                Debug.Log("Top of Collider");
            }
        }
    }}

Я нашел свое решение с проверкой верхней стороны коллайдера.С помощью этого кода, если игрок коснется верхней стороны коллайдера , он снова активирует прыжок.

1 голос
/ 06 июня 2019

Одним из решений является проверка положения точек столкновения при столкновении и просмотр любого из них «достаточно низко» от центра вашего игрока, чтобы можно было совершить прыжок:

private Collider2D playerCollider; 
private float playerJumpableOffset = 0.001;

void Start() { playerCollider = GetComponent<Collider2D>(); }

void OnCollisionEnter2D(Collision2D col)
{
    float jumpableWorldHeight = transform.position.y - playerJumpableOffset;

    for (int i = 0 ; i < col.contactCount && isJumping; i++)  
    {
        Vector2 contactPoint = col.GetContact(i).point; 
        if (contactPoint.y <= jumpableWorldHeight) 
        {
            isJumping = false;
        }
    }
}
...