Тёмный

📏Предсказание траектории и симуляция физики [Unity 3D] [Tutorial] 

Emerald Powder
Подписаться 77 тыс.
Просмотров 42 тыс.
50% 1

Предсказывать где окажутся физические тела через некоторое время может пригодиться для реализации многих игровых механик. Отображение игроку траектории его выстрела - самое очевидное применение симуляции физики. Перенос камеры в место попадания, проигрывание соответствующей музыки, расчёт очков, всё это требует узнать где окажется пуля, бильярдный шар, ракета, или другой игровой объект. В этом видео я рассмотрю две техники предсказания движения объекта, и покажу как реализовать их в Unity 3D
Содержание:
Расчёт по формуле - 0:51
Внешний вид линии - 6:35
Полная физическая симуляция - 8:23
Производительность и заключение - 17:05
Ссылка на готовый проект: github.com/emeraldpowder/Traj...
На этом канале регулярно появляются новые видео, которые позволят тебе научиться создавать игры, или подарят новые идеи и вдохновение, если ты уже умеешь. Подписывайся!
Остались какие-то вопросы, пожелания, или идеи для других видео? Смело пиши в комментарии под видео

Опубликовано:

 

14 мар 2019

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 69   
@Bond007in
@Bond007in 5 лет назад
Круто. Что то новое. А то весь ютюб завален уроками как сделать террейн.
@user-df7zl1dh9c
@user-df7zl1dh9c 5 лет назад
Что мне нравится в твоих видео, то что они разнообразные, а не как поставить террейн и сделать горы! Спасибо!)
@kirill7637
@kirill7637 3 года назад
Спасибо иза отличные уроки ! Ждём новых видео!
@SilverEchoDreamer
@SilverEchoDreamer 2 года назад
Мужик, огромное тебе спасибо. Ты нереально економишь время по Юз Кейсам. Словами не передать как помог. Спасибо огромное.
@Grapeoff
@Grapeoff 3 года назад
Буквально вчера решал задачу по кинематике, и вывел вот такую вот формулу траектории: y=-(9.8 / (2v^2 * cos^2(a))) * x^2 + tg(a) * x Даная формула рассчитывает траекторию полёта тела, брошенного из начала координат под углом альфа и скоростью v. Попробуйте ввести эту формулу в Geogebra и поиграйтесь со значением скорости. Можно заметить, как перемещение тела по оси x будет увеличиваться. Вы также можете поиграться с углом альфа, главное, не забудьте указать программе, что это градусы! (Значок °)
@user-tm6yc5gv3n
@user-tm6yc5gv3n 3 года назад
Очень классные у тебя видео! НЕ останавливайся! Огонь!!!
@EmeraldPowder
@EmeraldPowder 3 года назад
Спасибо!
@dmitrydmitry84
@dmitrydmitry84 5 лет назад
Блин бро !! у тебя реально необычные и крутые уроки !!! Действительно полезные, что самое главное =))) Спасибо большое за очередной урок.
@ivanm71
@ivanm71 3 года назад
Спасибо, от души душевно в душу!
@StoneOfAdventure
@StoneOfAdventure 4 года назад
Как же это оказалось легко сделать, большое тебе спасибо. Не хватает подобного контента на русском
@mariaondra1224
@mariaondra1224 3 года назад
то что надо, четко и по делу, спасибо!
@jellofun8971
@jellofun8971 4 года назад
Спасибо, очень помогло видео
@jimaniyt7901
@jimaniyt7901 2 года назад
Круто Что то новое. А то Весь ютуб завален уроками как сделать 2д шутер
@virtualriot4062
@virtualriot4062 4 года назад
Спасибо, хорошая информация
@jossefal1957
@jossefal1957 3 года назад
Полезное видео, спасибо
@user-we3we7nr9m
@user-we3we7nr9m 4 года назад
Спасибо. Очь. полезная видева, очь паможнт мене сичас. 8)
@OniGameDev
@OniGameDev 2 года назад
Классный способ, впервые их этого ролика узнал про физическую симуляцию. Но для моей игры не подходит из-за дороговизны. Придется самому придумывать упрощенный (благо нет влияния гравитации, а перемещение только в одной плоскости)
@marsik3773
@marsik3773 3 года назад
Первый способ понравился :)
@batuhantugrul1966
@batuhantugrul1966 3 года назад
Mate I dont know what you are saying but you proably saved my life you got sucsriber
@TolyaBogomolov
@TolyaBogomolov 3 года назад
lmao
@devdem
@devdem 5 лет назад
Ещё вчера на гитхабе увидел этот проект, а сегодня уже видос) кстати, норм прикол с 13:37 на каждом видосе) спасибо за урок, очень оригинально и полезно. Интересно, а опубликовывали ли вы свои игры? Было бы интересно посмотреть на них, если такие уроки шикарные) в общем, спасибо
@EmeraldPowder
@EmeraldPowder 5 лет назад
Спасибо! Да, под Android я опубликовал несколько игр в Play, play.google.com/store/apps/developer?id=Emerald+Powder Особенно последней горжусь, которая Clyde's Escape)
@drdrag1867
@drdrag1867 5 лет назад
Давно искал куллллл
@drdrag1867
@drdrag1867 5 лет назад
Хотел письмо с вопросом послать на емайл канала :( а мне два раза Адрес не найден Сообщению адресату emeraldpowder@gmail.ru не доставлено, так как домен gmail.ru не найден. Удалите пробелы, исправьте опечатки и повторите попытку. Как можно Вам написать?
@VovaMakesGames
@VovaMakesGames 5 лет назад
Было бы интересно добавить предсказание рикошета.
@lspoke
@lspoke 2 года назад
А можно сделать тоже самое, но Raycast'ом? Что бы ещё считывать инфу с объекта, с которым пуля столкнется?
@KESSme
@KESSme 3 года назад
Подсказка: У кого объекты, для которых вы предсказываете движение чуть более нестандартные и более гибкие, чем обычные примитивы (Например, у меня червяк, у которого концы извиваются и он состоит из трех сфер - коллайдеров), то передавайте в функцию предсказания траектории не только transform.position, но и задавайте вращение идентичное вашему текущему объекту, т. е задайте transform.rotation (передавайте quaternion) после того как заспаванили объект. Например: public void ShowTrajectory(Vector3 origin,Quaternion rotation,Vector3 Force) { ... GameObject sausage = Instantiate(sausagePrefab); sausage.transform.position = origin; sausage.transform.rotation = rotation; sausage.GetComponent().AddForce(Force); Physics.autoSimulation = false; ... }
@nealjosha
@nealjosha Год назад
Привет, не подскажешь, как сделать всегда одинаковую силу броска, не зависимо от места расположения курсора?
@ko-games7768
@ko-games7768 4 года назад
А есть у вас урок какой нибудь вращение башни танка как в WoT?
@unitynavigator3328
@unitynavigator3328 5 лет назад
Всё ещё надеюсь на урок с динамическими тенями в 2д (от колон, врагов и т.д.)
@saasrus
@saasrus Год назад
Так это в шейдере вроде делается, не? Либо альфаканал берётся, либо текстура прозрачности, и проходящий через пиксель луч умножается на коэффициент (после непрозрачных он становится нулём).
@masson22
@masson22 3 года назад
А для 2д тоже можно использовать?
@andrzejhubski3629
@andrzejhubski3629 4 года назад
Можно вопрос, немного несвязанный с видосом? Как сделать чтобы враг просчитал траекторию до игрока изменяя только угол броска (потому что во всех туториалах, которые я видел, изменяют скорость)?
@EmeraldPowder
@EmeraldPowder 4 года назад
Тут уже больше по геометрии вопрос, чем по программированию. Там всё в физическом движке по параболе летит, две точки известны, найти её параметры и нужный угол. В общем надо сесть и посчитать)
@saasrus
@saasrus Год назад
А нет каких-то более общих данных в юнити, типо сразу весь трансформ сохранить?
@user-yx5mb4sz9t
@user-yx5mb4sz9t Год назад
Конечно вариант с сохранением положения объектов в пространстве очень затратный. В этом плане лучше как-то их фиксировать, либо расчитывать только физику без отрисовки. Ну и кешировать объекты и компоненты лучше не из кода, а из редактора через [SerializeField]
@anatoliy9696
@anatoliy9696 5 лет назад
У меня вопрос: это нормально создавать переменную в Update ? Получается каждый кадр создается новая переменная, наверное будет правильней их вынести за пределы Update и просто записывать новые значения в переменные, или это работает как-то иначе ??? Буду благодарен за ответ !
@EmeraldPowder
@EmeraldPowder 5 лет назад
Массив точек - да, лучше вынести. Вообще обычно если переменная ссылочного типа (массив, список, экземпляр класса) - то дорого создавать её каждый кадр. А если типа по значению - структуры (Vector3, Quaternion), простые типы (int, float) - то вообще ничего не изменится если её куда-то вынести, и можно не переживать что оно в Update вызывается. У меня массив, так что его будет чуть быстрее один раз создать, а потом перезаписывать
@anatoliy9696
@anatoliy9696 5 лет назад
@@EmeraldPowder Спасибо )
@blogigrodela
@blogigrodela 3 года назад
Так и знал, что предсказатели - это люди, которые проверяют события, а затем откатывают время назад. Правда это не всегда работает, так как мир сильно подвисает из-за частых предсказаний
@apogee...
@apogee... 2 года назад
А как сделать, чтобы снаряд летел по параболе, как в фортс например?
@user-ki6ec9qz1s
@user-ki6ec9qz1s 4 года назад
привет. слушай у нас тут с одним программистом спор вышел. что мол нельзя сделать стрельбу от третьего лица в 3D по твойе технологии, что мол у тебя прицел в воздухе а не скользит по земле. Поможешь с вопросом если интересно!?
@EmeraldPowder
@EmeraldPowder 4 года назад
Можно делать рейкаст от мышки из камеры, и стрелять из персонажа уже в точку куда рейкаст попал. А с траекторией, если хочется чтобы снаряд попадал в точку куда прицел смотрит, уже придётся подумать и всяких формул баллистических на бумажке написать
@user-ki6ec9qz1s
@user-ki6ec9qz1s 4 года назад
@@EmeraldPowder то есть это реально сделать получается!
@pavelfilippov1492
@pavelfilippov1492 4 года назад
можете ли подсказать как осуществить, - зажатие клавиши должно активировать "силу снаряда" (чем дольше держишь тем дальше полетит снаряд)а траектория снаряда должна рисоваться вперед без указания мышкой на место куда стрелять. То-есть из стандартно направленной статичной пушки при зажатии клавиши и последующем отпускании начинает отрисовываться траектория, а при отпускании клавиши происходит выстрел.
@CorvusNoir
@CorvusNoir 4 года назад
Ну смотри. В данном примере траектория (что первая, что вторая) отрисовывается каждый кадр с учетом силы выстрела. Сила выстрела считается, потом показывается траектория и только потом, если игрок нажал кнопку, будет выстрел. В твоем случае всё должно быть также, ведь сила выстрела у тебя рассчитывается, пока кнопка нажата. То есть, пока сила "растёт", но ты не выстрелил траектория будет меняться, только передавай её(высчитанную силу) в скрипт. А когда отпустишь кнопку траектория резко изменится, ведь кнопку ты уже не держишь, так что, если ты хочешь, чтоб траектория оставалась нарисованной, тебе нужно временно отключить обновление. И ещё, крайне не советую при таких расчётах использовать второй метод (физический и с отскоками) если у тебя там полноценный нагруженный уровень (особенно, если мобильная игра) ибо будет напряжно. Или его надо оптимизировать, упростить и вызывать не каждый кадр.
@pavelfilippov1492
@pavelfilippov1492 4 года назад
@@CorvusNoir, спасибо. я отказался от траектории впринципе. Оставлю только повербар который будет подниматься ввиде столба вверх при зажатой кнопке.
@CorvusNoir
@CorvusNoir 4 года назад
@@pavelfilippov1492 Вот и правильно. А то оказуалили всё своими траекториями (:
@pavelfilippov1492
@pavelfilippov1492 4 года назад
@@CorvusNoir в моем случае я боялся что орханизьм чаловечаской не сможет привыкнуть к стрельбе, но потом прикинул и решил что- сможет.
@gxplay2270
@gxplay2270 4 года назад
@@pavelfilippov1492 увеличение силы можно сделать так: Public int power; If (Input.GetMouseButton(0)) { power += 4( ну или сколько там) } А слайдер это повышение слайдер валуе, уже плохо помню как это делать. Можно sl.value = power Ну вот вроде норм. Возможно я не правильно написал
@hlibprishchepov322
@hlibprishchepov322 4 года назад
Гляньте флеш игру гравитационные войны там меткость это длина траиктории
@bakytzhanrakhmetov3338
@bakytzhanrakhmetov3338 4 года назад
Класс! как сделать движение орудия по оси Z?
@Misha-775
@Misha-775 3 года назад
А смысл в данном случае? Нет, можно конечно назначить поворот на кнопки, ибо камера не прикреплена к орудию, но тогда вид будет искаженный, и т.д.
@user-ek7pi3by5s
@user-ek7pi3by5s 4 года назад
Привет, я новичок в юнити, пытаюсь пытаюсь построить траекторию для планет из одного из твоих видео, но не получается, юнити даже линию не отрисовывает, а планета улетает за горизонт хотя до этого летала по одой траектории прекрасно. Подскажи что я делаю нетак?
@EmeraldPowder
@EmeraldPowder 4 года назад
C Physics.Simulate пытаешься? Надо убедиться что после того как его вызываешь для построения траектории все планеты возвращаешь на изначальные места, т.к. когда мы их двигаем чтобы поставить точки то они прямо по настоящему двигаются
@user-ek7pi3by5s
@user-ek7pi3by5s 4 года назад
@@EmeraldPowderНет, я пытаюсь построить траекторию с помощью формулы, и затуп как я полагаю скорее всего в ней
@Korkish
@Korkish 4 года назад
а как ты к ветору3 добавил флоат?
@Korkish
@Korkish 3 года назад
@@PyXiion хух, а ты вовремя, спасибо за ответ, но я уже за всё шарю 😂
@aleksandrsavicki9555
@aleksandrsavicki9555 5 лет назад
Если применить speed = new Vector3 (0, 10, 2), то траектория не совпадает с реальным движением, почему так?
@EmeraldPowder
@EmeraldPowder 5 лет назад
С первым или вторым методом? Вроде бы совпадает, со вторым методом она предсказанная у меня получилась на один шарик ниже примерно чем на самом деле, но это в пределах погрешности, можно попробовать порегулировать time step который передаётся в Simulate чтобы увеличить точность
@aleksandrsavicki9555
@aleksandrsavicki9555 5 лет назад
@@EmeraldPowder public class addForce : MonoBehaviour { public Rigidbody obj; public float _X; public float _Y; public float _Z; public TrajectoryRenderer Trajectory; Vector3 speed; void Start() { speed = new Vector3(_X,_Y,_Z); } private void Update() { Trajectory.ShowTrajectory(transform.position, speed); } void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Shuttlecock"){ obj.AddForce(speed, ForceMode.VelocityChange); } } } И в этом случае траектория при Y=10 в 2 раза меньше, а при Y=20 уже 1/4 пролетает от того что LineRenderer показывает (X и Z const)
@aleksandrsavicki9555
@aleksandrsavicki9555 5 лет назад
points[i] = origin + speed * 0.8f * time + Physics.gravity * time * time / 2f; if(points[i].y < 0) { lineRendererComponent.positionCount = i+1; Debug.Log(points[i]); break; } при изменении Y пляшет точность, но если выставить Y = 12, то с коэффициентом 0.8 можно получить почти точные координаты падения тела (по траектории все равно не летит). В консоли получил координаты приземления и теперь можно приступать к написанию ИИ))) Спасибо за видео которое сдвинуло мой проект с мертвой точки!!!
@manekenich
@manekenich 3 года назад
Я хочу просто научиться снайперить в шеллшок лайв
@parf2153
@parf2153 4 года назад
Радиус шаров не учитывается, потому предсказание неточное. А так да, полезный урок.
@anderwafe
@anderwafe 2 года назад
Боже, все эти игры со временем меня слишком взбудоражили,аааа
@Franc_Net
@Franc_Net 3 года назад
С мобилы код не видно. Тяжело удерживая Ctrl+колесо мышки, увеличить? У вас 80% экрана не нужная информация, а код не видно. Т.к. нужное занимает 20% :(
@user-oj4ye4ol6m
@user-oj4ye4ol6m 6 месяцев назад
не работает твой tile. точек нет. сплошная линия
Далее
Всё про корутины в Unity 3D
13:18
Просмотров 99 тыс.
Creating a Flight Simulator in Unity3D (Part 1)
21:33
Have You Seen Inside Out 2?
00:12
Просмотров 4 млн
220 volts ⚡️
00:16
Просмотров 131 тыс.
Splines are Awesome!!!
11:13
Просмотров 146 тыс.
Projectile Trajectory Prediction in Unity
17:20
Просмотров 9 тыс.
⚡ Всё про события в Unity 3D
21:38
Просмотров 102 тыс.
5 Minute DOODLE JUMP Unity Tutorial
5:10
Просмотров 21 тыс.
ПОЧЕМУ ВСЕ ТРЯСЕТСЯ в UNITY ?
39:14