Задать вопрос
Egorian
@Egorian

Как исправить проверку на касание земли?

Делаю 2д Платформер. Сделал такую систему проверки на прикосновение к земле:
public class GroundChecker : MonoBehaviour {

    private Character player;
    private void Start()
    {
        player = GetComponentInParent<Character>();
    }
     private void OnTriggerEnter2D(Collider2D collision)
       {
           if ( collision.gameObject.layer==8)//8 слой-слой с объектами по которым можно ходить
           {
               player.onGround = true;
              
           }
    
    }
    private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.gameObject.layer == 8)
        {
            player.onGround = true;
        }
    }
//Проблемный участок//
    private void OnTriggerExit2D(Collider2D collision)
       {
           if (collision.gameObject.layer==8)
           {
               player.onGround = false;
      
           }
       }
    

}

Земля у меня состоит из нескольких блоков.
Когда персонаж переходит с одного блока на другой на несколько мгновений играет анимация прыжка. Как изменить проверку на выход из "земли"?
  • Вопрос задан
  • 1963 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 2
Griboks
@Griboks Куратор тега C#
Необходимо проверить, не стоит ли персонаж на других блоках в момент выхода с блока.
Ответ написан
Egorian
@Egorian Автор вопроса
Немного модифицировал скрипт:
public class GroundChecker : MonoBehaviour {

    private Character player;

    private int newobjlayer;
    private void Start()
    {
     
        player = GetComponentInParent<Character>();
    }

  private void OnTriggerEnter2D(Collider2D collision)
       {
    
        //if (collision == null) print("abcd");       
         newobjlayer= collision.gameObject.layer;
           if ( collision.gameObject.layer==8)
           {
               player.onGround = true;
               //print(collision);
           }
        if (collision.gameObject.layer != 8)
        {
            player.onGround = false;
            //print(collision);
        }
    }
    private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.gameObject.layer == 8)
        {
            player.onGround = true;
            //print(collision);
        }
    }
    private void OnTriggerExit2D(Collider2D collision)
       {
       
        Vector3 speed = player.GetComponent<Rigidbody2D>().velocity;
   
        if (collision.gameObject.layer == 8 && speed.y<0||speed.y>0)
        {
            player.onGround = false;

        }
        
        
    }

}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы