Проблема прицеливания в бильярд/пул в Unity3d

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

RaycastHit2D hit = Physics2D.CircleCast(cue.position, _radius, dir, 100f, ~(ignoreLayer));
if (hit.collider != null)
{
    Debug.DrawRay(hit.collider.transform.position, -1f * hit.normal, 
    Color.green, Time.fixedDeltaTime);
}

Вот результат:

введите здесь описание изображения

Установить скорость

rb.velocity = dir * force;

Результат:

введите здесь описание изображения

Как найти точное направление движения, спасибо

Изменить:

Я пробовал Double Radius Casting, это работает только наполовину ... только когда луч находится внутри внутреннего круга.


person wrRios    schedule 16.06.2018    source источник
comment
Установите скорость на hit.normal * force?   -  person Fredrik Widerberg    schedule 16.06.2018
comment
мы можем установить это для целевого мяча OnCollisionEnter2D, вручную изменить скорость целевого мяча.. но это своего рода мошенничество..) Я думаю (надеюсь), что есть интуитивно понятный способ добиться этого.. спасибо @FredrikWiderberg   -  person wrRios    schedule 16.06.2018
comment
Это зависит от ряда свойств, включая i) (отношение) масс шаров, ii) коэффициент сопротивления между шарами (1 = упругое столкновение), iii) трение между шарами (которое приводит к угловому моменту). передача) и iv) учитываете ли вы вращение (как прямой результат iii))   -  person meowgoesthedog    schedule 16.06.2018
comment
Вы установили физический материал на шарах на нулевое трение и нулевую упругость?   -  person Lincoln Cheng    schedule 19.06.2018
comment
@LincolnC Да, также я пытался установить все на ноль, сохранить настройки по умолчанию и многое другое ..   -  person wrRios    schedule 19.06.2018
comment
Любой, пожалуйста.. С двойным радиусом. Мы можем предсказать 100% только тогда, когда луч находится внутри шара.. но направление по-прежнему неверно при забросе снаружи prntscr.com/jwp62v   -  person wrRios    schedule 19.06.2018
comment
Кто нибудь пожалуйста..   -  person wrRios    schedule 26.11.2018
comment
Если вы не против поделиться всеми вашими сценариями C# и скриншотами настроек вашего проекта Unity, я могу попробовать это сам. Между ними так много переменных, что вам может понадобиться немного больше вашего проекта, чтобы сделать проблему воспроизводимой.   -  person K Man    schedule 27.01.2019
comment
В более новых версиях Unity вы, по-видимому, можете использовать несколько сцен физики, чтобы точно определить результат. Возьмите, например, это видео о рисовании траектории мяча.   -  person Philipp Lenssen    schedule 06.08.2019
comment
вот также один старый тестовый проект, я думаю, что он отлично работал там github.com/unitycoder/Snooker2D   -  person mgear    schedule 16.02.2021


Ответы (1)


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

Попробовав это на простой 2D-сцене, я обнаружил, что если установить трение на 0,01 и упругость на 1,0, все будет работать так, как я и ожидал. (в Unity 2020.1)

В небольшом образце сцены, который я добавил, есть мяч, нацеленный на другой, так что результирующий угол должен составлять 45 градусов. И после установки свойств phyics-mat с трением 0,01 и отскоком 1,0 результирующий угол соответствует ожидаемому.

С матом по умолчанию я получаю такое же поведение, как вы описали.

Вы забыли назначить материалы по физике?

Вы подошли к точке касания и проверили правильность прицеливания?

мой пробный проект

person Blindleistung    schedule 18.04.2020