Здравствуйте.
Пишу 2D платформер.
На просторах инета в классических скриптах кхарактер контроллера 2D, определения игрока на земле в классике везде используется вот такой код:
grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
На персе висят Rigidbody2D, BoxCollider2d, CircleCollider2d(чтоб не стопорился на неровном полу), CharacterController(Script), Animator.
И всё хорошо робит, прыгаем по платформам бегаем молимся всё чикимони. Но есть одно но: когда я начал наблюдать за переменной grounded то заметил такой момент , к примеру, если плеер упадёт с платформы в бездну то переменная grounded изредка становится равной true(моргает ею) хотя никакой земли под ногами естесственно нет. То же самое наблюдается и когда объект после прыжка падает вниз.
Шо за такэ глюк?
Решил поставить костыль в виде кода:
//вертикальная скорость
vSpeed = GetComponent<Rigidbody2D>().velocity.y;
//определяем, на земле ли персонаж
if (vSpeed == 0) {
grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
} else {
grounded = false;
}
тогда всё стало чинно и правильно, при падении grounded ни когда нестановится в true.
Просто вопрос:
Подскажите пожалуйста уважаемые спецы это глюк движка? Или я чтото неправильно понимаю в логике двигуна и groundCheck`a ?