Dimusikus
@Dimusikus
Любитель

Unity глючно определяет Grounded?

Здравствуйте.
Пишу 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 ?
  • Вопрос задан
  • 1756 просмотров
Решения вопроса 1
Dimusikus
@Dimusikus Автор вопроса
Любитель
Короч решил.
Создал слой(Layer) =Ground, все платформы пометил этим слоем.
В CharacterController в поле WhatIsGround отключил галочку Default.
И этот финт пропал.
Надо было всё именно так по уму делать, а я и незнал.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@sergey_kzn
Physics2D.OverlapCircle возвращает вам Collider2D. Посмотрите что это за коллайдер, может и поймете с чем ваш персонаж пересекается.

как-нибудь так:
Collider2D collider = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
Debug.Log(collider.name);


docs.unity3d.com/ScriptReference/Physics2D.Overlap...
docs.unity3d.com/ScriptReference/Collider2D.html
Ответ написан
Ваш ответ на вопрос

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

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