TGViewer
Григорий Дядиченко Григорий Дядиченко @dev_game · 2.66K subscribers
Post #550 512
Решим простую физическую 2D задачку
#задачка

Попробуем такой формат. Есть синий кружок радиуса 0.5 и массы равной 1. Есть стенка с центром в 3 юнитах от него ширины 0.5. Нам нужно чтобы шарик попал на оранжевую платформу размера 0.1 с центром в 6 юнитах. Как это сделать используя Unity физику? Проект, где можно поиграться будет по ссылке. Задачка Task_1.

Компактное решение скриптом

Полное обоснование:

Один из вариантов решения понятное дело просто приложить нужную силу. В целом в физике в движках лучше работать в силах или в скоростях, так как если перемещать объект просто за трансформ, то там физика не будет работать корректно. А теперь к решению. По сути это задача баллистики. Начнём мы с силы. Которую мы задаём Силу в данном случае лучше прикладывать, как мгновенную, то есть ForceMode2D.Impulse.

В режиме Impulse — это можно расценивать, как упругий удар. То есть "мгновенно приложенная сила" — это импульс. То есть p = m * v; Так как m = 1, то у нас сводится всё к тому, что мы придали некоторую скорость v0 объекту.

Так как у нас нет ветра, трения воздуха и т.п. То по сути можно разделить уравнения на два для простоты расчётов.

Посчитаем y. Высоту нам нужно набрать больше 4.5, но чтобы ничего не коснуться и проще было считать возьмём с запасом 2g, где g=9.81.

h = vY * vY / 2 g — максимальная высота тела зная ускорение. Так как мы мгновенно придаём силу, то vY = sqrt(2 *2* g * g) При g = 9.81, это равно vY = 19,62.

Уравнение движения выглядит так: y = y0 + 2g * t + g * t * t / 2

Теперь посчитаем время t, чтобы вычислить скорость по x. Из формулы выше получится. t * t * g / 2 + 2g * t = 0. t = -2 * g * 2 / g = 4. То есть полёт займёт 4с.

По x всё проще. Только нужно учитывать. Что без трения об воздух.

Формула движение x = x0 + vX * t; Ускорения у нас тут не будет, так как мы в начальный момент придаём только импульс, а изначальные силы никакие не действуют. Для удобство начало координат у нас в центре круга. То есть 6 = vX * 4. Где v1 скорость по оси X.

vX = 6 / 4 = 1.5;

То есть искомая сила. _force = (1.5, 19.62).

Это не единственное решение. И можно подобрать числа для любых значений. Но оно показывает, как можно "подстраивать математические законы под условия для удобства". И какими формулами можно пользоваться, чтобы рассчитать траекторию по которой скажем босс будет кидать предметы в игрока или в какие-то зоны. Чтобы полёт был реалистичным по физике, а не по заготовленному сплайну. Скрипт с решением есть в репозитории. Чтобы включить готовое решение нужно включить SolutionObject.

Если подобный вид задачек интересен. С примером на Unity сборки такого примера, то поставьте 🔥. Это конечно больше математическая задача сама по себе. Но она показывает, как подстраиваются решения под точные значения и как можно удобно пользоваться 2д физикой. Будем думать над интересностью тех или иных задач. Для задач будет общий репозиторий и первая задача уже там. Параметры верные я выставлять в задачи не буду.
GitHub Unity-Test-Tasks/Assets/Unity-Test-Tasks/Task_1/Scripts/Task1_Solution.cs at master · Nox7atra/Unity-Test-Tasks Репозиторий с задачками по Unity. Contribute to Nox7atra/Unity-Test-Tasks development by creating an account on GitHub.
  • 🔥 21
  • 👍 2
  • ❤ 1
  • 👎 1
More from @dev_game
  1. Oct 16, 2026Когда с ходу за неделю собралось больше 700 пользователей
  2. Oct 16, 2026Григорий Дядиченко pinned a photo
  3. Oct 16, 2026Разыгрываем AirPods Pro 3 С 16 октября по 15 ноября в MES идёт розыгрыш. Главный приз — Ai…
  4. Oct 16, 2026В общем да, на релизе оказывается сразу возникает слишком много дел
  5. Oct 14, 2026Куда пропал? Всем привет. Куда я пропал? Да замотался, выиграл два покерных турнира и доде…
  6. Oct 8, 2026Метрики, метрики и ещё раз метрики https://app.mes-poker.ru Эхх, со своим продуктом руки с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →