Как сделать игру Worms в Unity ?

  Рет қаралды 22,132

Eccentric Games

Eccentric Games

Күн бұрын

Бесплатный курс по созданию игры на движке Unity от Яндекс Игр:
ya.cc/t/c3Tiy3...
Проект из урока:
drive.google.c...
В этом видео показываю алгоритм, который я написал чтобы вырезать в земле отверстия разных форм. Рассчитываются точки пересечения и строиться новая линия, полученная вычитанием одной линии из другой. На этой основе можно сделать игру аналогичную Worms. Но такой подход можно применять еще в массе других казуальных механик.

Пікірлер: 102
@Tumanop
@Tumanop 2 жыл бұрын
Люди которые оставляют ссылки на исходники под видео, в следующей жизни перераждаються в богатых семьях и с большим агрегатом.
@52RK
@52RK 2 жыл бұрын
В том числе, если родились девочками
@iamskoi
@iamskoi 2 жыл бұрын
Еще бы эта ссылка была бы на гитхаб - цены бы не было)
@SERG__ZV
@SERG__ZV 2 жыл бұрын
Слушай займи мне 100 тысяч клянусь я тебе миллион в следующей жизни отдам.
@KESSme
@KESSme 2 жыл бұрын
Очень интересная реализация интересной механики. Также хотел сказать спасибо за бесплатный курс по разработке браузерных игр на Unity (На яндексе), тоже очень интересно и полезно!
@EccentricGames
@EccentricGames 2 жыл бұрын
Спасибо)
@einstein6451
@einstein6451 2 жыл бұрын
Ох не зря я подписался на этот канал. Просто недавно искал видосы про физику т.к. хотел в 3д порпактиковаться. А тут видос новый.
@Elvisasha
@Elvisasha 2 жыл бұрын
Прекрасно! Я уже пробовал подобное написать, но потом уперся в то, что на линии может быть несколько пересечений, полез исправлять, по дороге пооптимизировал производительность, и все вообще перестало работать. А потом на работе начался завал и я забросил идею реанимировать алгоритм :( Я вот кстати не знал, что коллайдер умеет генерировать меш и писал генерацию руками, спасибо, что подсказал! Надо будет сделать вторую попытку написать. * и да, лайк/подписка обязательно!
@WeslomPo
@WeslomPo 2 жыл бұрын
Код взятия пути с коллайдера следовало в LineFromCollider пересунуть. Этот код повторяется несколько раз и используется для подготовки данных для этого метода. Ну и как бы можно еще пару десятков замечаний сделать, по поводу качества кода и оптимизаций. Но не буду. Неплохо разобрал алгоритм, лайк, подписка.
@iamskoi
@iamskoi 2 жыл бұрын
Вот ни разу не разработчик игр, но очень интересно смотреть такие видео, с рассуждениями, алгоритмами. Огромное спасибо автору! Лайк и подписка на канал. Пойду остальные видео смотреть) А, еще: исходники лучше все же кидать на гитхаб:)
@EccentricGames
@EccentricGames 2 жыл бұрын
Спасибо) А какая разница? так и так скачивать нужно один и тот же объем информации. И столько же кнопок нажимать. Ну т.е. есть некоторый процент людей, которым нужно пояснить как скачивать с гита. А есть те кто умеют и им без разницы как скачать. Вот и выбор для меня очевиден как прикрепить
@titanovsky
@titanovsky 2 жыл бұрын
Большое спасибо, как раз сейчас изучаю Unity для разработки игр, чтобы потом найти работу по данной специальности. Мне формулы внутри метода по поиску пересечения, прям напомнили один момент, где нужно было реализовать нажатие на 2D панель в 3D пространстве, я сначала подумал, может просто локализировать HitPos взгляда игрока относительно 2D панели, но когда увидел реализацию, там всё куда было сложнее, и очень аналогично тому, что в поиске по пересечению. Лайк и подписка :)
@darkModeYT
@darkModeYT 2 жыл бұрын
Идеально! Очень давно ждал!! Спасибо ❤
@legotechnicbuilderua7692
@legotechnicbuilderua7692 2 жыл бұрын
Спасибо Огромное! Давно ждал новых видео! Возможности этой механики огромные, обязательно где-то использую!
@PavelNebo
@PavelNebo 2 жыл бұрын
Круто, алгоритм отличный, было интересно помсмотреть. Даже захотелось в Юнити вернуться)) ты мотивируешь !
@SergKoster
@SergKoster 2 жыл бұрын
Недавно начал смотреть твои видео, а ты в честь этого решил снять видео)
@gecreator412
@gecreator412 Жыл бұрын
Ну это конечно простой вариант алгоритма. Здесь будет очень много ошибок(которых на первый взгляд не видно), что будет приводить к полному исчезновению формы из-за ошибок триангуляции и соответственно ошибок декомпозинга для concave форм физики. Будет не очень весело если в релизной версии игры при стрельбе из гранатамёта у пользователя исчезнет пол карты. Также нет реализации отверстий внутри форм(для этого нужно будет нарезать форму на де части или более). Там очень много подводных камней из-за ошибок округления положения вершин(сохраняете в файл все вершины(всё работает), загружаете уже нет(welcome to float hell)). Вообщем что-бы сделать игру с подобным движком поверхностей, нужно не пару дней. Пол года минимум жесткой разработки и тестов.
@neverworld8815
@neverworld8815 2 жыл бұрын
Очень круто, всегда хотелось это сделать но руки не доходили а тут прям как подарочек, спасибо автору !
@joblik
@joblik 2 жыл бұрын
Приятно видеть интересные видео)
@EccentricGames
@EccentricGames 2 жыл бұрын
Спасибо)
@МаксимЛогинов-ъ6т
@МаксимЛогинов-ъ6т 2 жыл бұрын
Ох заморочился ты конечно) Хорош 💪
@vernoyakira3611
@vernoyakira3611 2 жыл бұрын
Красавчик! Рад что ты стал чуть более медийным)
@janiksuper
@janiksuper 2 жыл бұрын
Как всегда на высоте, очень познавательно и всё по делу, браво!
@Roman_SBB
@Roman_SBB 2 жыл бұрын
Отличная новость про курс. Большое спасибо за труд!
@seregaplay1770
@seregaplay1770 2 жыл бұрын
Ура! Снова видео начали выходить
@JuggernautWare
@JuggernautWare 2 жыл бұрын
Спасибо за курс!
@andrewsemenenko8826
@andrewsemenenko8826 2 жыл бұрын
Объяснение просто супер! Люблю математические задачи, в часности задачи на графах! Прикольно, что ключ к решению этой проблемы - порядок следования по часовой или против часовой стрелки, чесно не подумал об этом. Скорее всего тот алгоритм, который ты нашел широко известен и используется в таких программах, как тот же фотошоп🤔 В общем огромное спасибо!
@dopehype
@dopehype 2 жыл бұрын
очень круто это же надо в уме было всё обработать и придумать как всё будет взаимодействовать
@namen6535
@namen6535 2 жыл бұрын
круто, как всегда)
@Agranam
@Agranam 2 жыл бұрын
Это мегоофигенно!)
@Kirvun
@Kirvun 2 жыл бұрын
Илья выпускает новый ролик. Синоптики объявляют неделю игр про червячков, игры с похожей механикой будут выходит в два раза чаще ))
@iOzz
@iOzz 2 жыл бұрын
Прочти полностью) Гениально). Я искал похожий материал год назад). Я всеми 5ю руками за вторую часть ролика с оптимизацией кода. Могу тут скинуть пару вариантов. Но я не могу сам допилить и не могу избавится от бага, когда ломается меш. * Вот полу-осмысленные наброски в теории Объединить два цикла, которые перебирают сегменты landLine и CircleLine. Это сократит количество итераций вдвое. А вместо использования списка для хранения точек использовать набор хэшей. Это позволит проверить, существует ли уже точка в наборе, за постоянное время, а не за линейное время, как в случае со списком. Вместо того, чтобы перебирать точки на линиях и проверять, являются ли они пересечениями, можно создать отдельный список точек пересечения. Это позволит перебирать только пересечения, а не все точки на линиях. Можно рассмотреть возможность использования более эффективного алгоритма обнаружения пересечений, например алгоритма Бентли-Оттмана. Этот алгоритм имеет временную сложность O(n log n) для n сегментов, что может быть быстрее, чем текущий алгоритм для большого количества сегментов. Возможно использование структуры данных пространственного индексирования, такой как дерево квадрантов или дерево k-d, для хранения сегментов и быстрого поиска пересечений. Это может значительно сократить количество итераций и повысить производительность алгоритма
@iOzz
@iOzz 2 жыл бұрын
public List Substraction(Line landLine, Line circleLine) { // Create a list of intersection points List intersections = new List(); // Combine the two loops that iterate over the segments of the landLine and circleLine for (int l = 0; l < landLine.Segments.Count; l++) { Segment landSegment = landLine.Segments[l]; Vector2 al = landSegment.A.Position; Vector2 bl = landSegment.B.Position; for (int c = 0; c < circleLine.Segments.Count; c++) { Segment circleSegment = circleLine.Segments[c]; Vector2 ac = circleLine.Segments[c].A.Position; Vector2 bc = circleLine.Segments[c].B.Position; if (Intersection.IsIntersecting(al, bl, ac, bc)) { Vector2 position = Intersection.GetIntersection(al, bl, ac, bc); Point crossPoint = new Point(); crossPoint.Position = position; crossPoint.LandSegment = landSegment; crossPoint.CircleSegment = circleSegment; crossPoint.IsCross = true; intersections.Add(crossPoint); } } } // Use a hash set to store the points HashSet allPoints = new HashSet(landLine.Points); bool onLand = true; Point startPoint = allPoints.First(); while (allPoints.Count > 0) { Point thePoint = allPoints.First(); // Check if the point is outside the circle if (_circleCollider.ClosestPoint(thePoint.Position) == thePoint.Position || thePoint.IsCross) { allPoints.Remove(thePoint); continue; } // Collect points in a chain and assign NextPoint to them for (int i = 0; i < _testIterations; i++) { Line currentLine; // ccw -- counterclockwise bool ccw; if (onLand) { currentLine = landLine; ccw = true; } else { currentLine = circleLine; ccw = false; } int currentIndex = currentLine.Points.IndexOf(thePoint); int nextIndex = GetNext(currentIndex, currentLine.Points.Count, ccw); Point nextPoint = currentLine.Points[nextIndex]; // Check if the next point is an intersection if (nextPoint.IsCross) { onLand = !onLand; nextPoint = onLand ? nextPoint.LandSegment.OtherCrossPoint(nextPoint) : nextPoint.CircleSegment.OtherCrossPoint(nextPoint); } thePoint.NextPoint = nextPoint; allPoints.Remove(thePoint); thePoint = nextPoint; } } // Recalculate the lines with the updated points and intersections
@Scriberrot
@Scriberrot 10 ай бұрын
друг, я весь твой коммент заскринил и в рамочку сейчас вставлю, xD
@iOzz
@iOzz 10 ай бұрын
😅 жесть я тут расписал)) не помню уже@@Scriberrot
@VirtexR
@VirtexR 2 жыл бұрын
Очень жду каких-нибуть еще уроков)
@TorisNik
@TorisNik 2 жыл бұрын
Круто, даже курс, ну все) мир, жди моих игр)
@shmadzilla
@shmadzilla 2 жыл бұрын
Классные ролики. Очень интересно. Развивай тему! Что-то типа "игра за полчаса"
@legotechnicbuilderua7692
@legotechnicbuilderua7692 2 жыл бұрын
главное не скорость, а качество!
@Krol_one
@Krol_one 2 жыл бұрын
5 точка ! лучший ! ;) спасибо за видосы ! Продолжай радовать нас своими шуткосами ;)
@EccentricGames
@EccentricGames 2 жыл бұрын
Спасибо)
@lobster133
@lobster133 2 жыл бұрын
За курс больше спасибо
@Domino0s0
@Domino0s0 2 жыл бұрын
Привет ,классный ролик!
@EccentricGames
@EccentricGames 2 жыл бұрын
Спасибо)🐛
@Milash001
@Milash001 2 жыл бұрын
Лайк и коммент в поддержку канала!😊
@vladimirkalugin-devstudio9721
@vladimirkalugin-devstudio9721 2 жыл бұрын
Спасибо за туториалы которые делаешь) рад видеть успехи)
@OniGameDev
@OniGameDev 2 жыл бұрын
Ого, какой классный новый урок! Приятно было снова услышать от тебя полезную и интересную информацию)
@LexaSt86
@LexaSt86 2 жыл бұрын
Очень круто!
@_mirai
@_mirai 2 жыл бұрын
хотел лечь пораньше, но видно не судьба
@kirillen0tik350
@kirillen0tik350 2 жыл бұрын
Классно было бы посмотреть продолжение, как ты делал б из техно-демки в рабочую игру
@user-gm3gt7cl2y
@user-gm3gt7cl2y 2 жыл бұрын
Очень круто! Ты молодец! 🔥
@НикитаМордик-к8ф
@НикитаМордик-к8ф 2 жыл бұрын
крутое видео, спасибо за старания
@lautarocabral8710
@lautarocabral8710 Жыл бұрын
Amazing! Thanks for this content!
@Martin-bh6uq
@Martin-bh6uq 2 жыл бұрын
Чувак ты крутой!
@Ogurechik
@Ogurechik 2 жыл бұрын
Спасибо большое!!
@romantroshkov4854
@romantroshkov4854 2 жыл бұрын
Красавчик!
@Nikita_Pro89
@Nikita_Pro89 2 жыл бұрын
Круто конечно)))
@moreokean
@moreokean 2 жыл бұрын
Почему перестает работать, если подвинуть объект Land, изменив его Position в Transform? Если позиция Land не (0,0,0) - не работает. Например, если нужно добавить второй объект Land рядом с другими координатами. Как их учитывать?
@moreokean
@moreokean 2 жыл бұрын
Всё стало работать, если в компоненте Land.cs после _colliderRenderer.CreateMesh(); обнулять позицию коллайдера _collider.transform.position = new Vector3(0f,0f,0f); Интересно, почему так?
@heavyCO33
@heavyCO33 2 жыл бұрын
Интересный проект и реализация 👍👍👍
@Darksanderst
@Darksanderst 2 жыл бұрын
Неожиданно)
@andrzejhubski3629
@andrzejhubski3629 2 жыл бұрын
Блин где же ты год назад был…
@bezinteresa6806
@bezinteresa6806 2 жыл бұрын
Илья лучший
@EccentricGames
@EccentricGames 2 жыл бұрын
Спасибо! И ты лучший)
@gm_Maker
@gm_Maker 2 жыл бұрын
Офигеть... Спасть отменяется :)
@BockJlucuii
@BockJlucuii 2 жыл бұрын
Круто!
@dclxviclan
@dclxviclan 2 жыл бұрын
All my childhood in one video
@sanosanbaby
@sanosanbaby Жыл бұрын
скорей всего будет некорректно работать при реберных пересечениях, почему не использовать Clipper Library, которая специально создана для выполнения булевых операций над полигонами (объединение, пересечение, вычитание, исключающее ИЛИ) и смещения контуров полигонов на основе алгоритма Вейлера-Азертона
@NeHacker
@NeHacker 2 ай бұрын
А в 3D с видом сверху можно тоже так или там другой подход нужен?
@jil635
@jil635 2 жыл бұрын
Можно реализовать достаточно быстрый метод с пикселями, нужно только знать как пользоваться вычислительными шейдерами)
@jil635
@jil635 7 ай бұрын
@@СветозарБоголюбов все там же, в вычислительных шейдерах
@DimokFa
@DimokFa 2 жыл бұрын
Теперь чмыри Сакутина, как он чмырит Хауди Хо.
@Tumanop
@Tumanop 2 жыл бұрын
Благородный человек не смеётся над юродивами. Так говорил Конфуций
@gm_Maker
@gm_Maker 2 жыл бұрын
😂
@igorshlyakov9321
@igorshlyakov9321 2 жыл бұрын
Они друзья, на сколько я помню)
@igorshlyakov9321
@igorshlyakov9321 2 жыл бұрын
@Вин Ты назвал его глупцом, но сделал это без уважения)))
@jcdentonalexmelyon3664
@jcdentonalexmelyon3664 2 жыл бұрын
Оч круто
@insoaryt
@insoaryt Жыл бұрын
А нет ли какого-то другого способа создавать/редактировать 2д меши, кроме как тащить их из коллайдера? Имхо меш в данном деле - первичен. И по-хорошему коллайдер при создании должен откуда-то его получать, а не раздавать.
@igorshlyakov9321
@igorshlyakov9321 2 жыл бұрын
Очень сложно... я мозг взорвал..., но оторваться не могу
@java198626
@java198626 Жыл бұрын
Огромное спасибо за пример пример проекта. Если нажимать ПКМ, то да мэш перестраивается и все отлично работает, но лишь при однократном нажатии, если же сделать изменение каждый кадр, т.е. пока кнопка зажата, чтобы как бы рисовать дыры в мэше кистью, то Юнити крашится. а алгоритм начинает неверно рассчитывать Мэш. Не решали ли Вы или кто здесь эту проблему, поделитесь пожалуйста, если удалось у кого решит ее. Заранее Спасибо.
@Driftmaniak_UA
@Driftmaniak_UA 2 жыл бұрын
А смог бы сделать гонки с физикой как в F-Zero?)
@ko-games7768
@ko-games7768 2 жыл бұрын
Давай Worms в 3D.
@SPORTCHEER
@SPORTCHEER 2 жыл бұрын
о круто с яндексом калаба)
@wofo_industry
@wofo_industry 2 жыл бұрын
Хм, интересно а насколько производительно будет в трехмерном пространстве
@zuzuBoba
@zuzuBoba 2 жыл бұрын
смотря сколько точек у вырезающей фигуры)
@alekseyn7866
@alekseyn7866 2 жыл бұрын
Коллеги, кто знает: в стим можно выпустить бесплатную игру со встроенной рекламой или там это запрещено?
@zuzuBoba
@zuzuBoba 2 жыл бұрын
тоже интересно 😅
@modjaid3907
@modjaid3907 2 жыл бұрын
Вормс с нуля за два дня?! Это точно туториал? Или просто психологическое уничтожение средненьких разработчиков?
@Kitsikoo
@Kitsikoo 2 жыл бұрын
Изобрёл Boolean)
@noatarimax
@noatarimax 2 жыл бұрын
почему всё на гениальном языке?
@4rtochka
@4rtochka 2 жыл бұрын
Интересно , как они это на sega сделали
@ОскарСамойлов
@ОскарСамойлов 2 жыл бұрын
там подмена спрайта с помощью маски, как я себе это представляю
@Xtonior
@Xtonior 2 жыл бұрын
Блин, наверное прошу много, но было бы лучше ссылку на гитхаб, что бы не качать проект)
@igort1642
@igort1642 2 жыл бұрын
Отсыпьте лукасов, да побольше!))
@vitaly6838
@vitaly6838 2 жыл бұрын
Создал булевы операции с нуля
@EmeraldForestCat
@EmeraldForestCat Жыл бұрын
Возможно в оригинальных червяках используется что то вроде текстуры части которой исчезают с помощью альфа канала. То есть взрыв по своей сути похож на кисточку в фотошопе. Наверно этот вариант и сейчас должен работать очень стабильно.
@АааАаа-о2ы
@АааАаа-о2ы 2 жыл бұрын
Привет
@Obelardos2
@Obelardos2 2 жыл бұрын
Интересная задача и хорошее объяснение. Но в бою (не в туториале) такой код с объектами на каждый шаг, листами, linq и тд не годится, еще нужно оптимизировать теперь все это по памяти. А так супер!
@qdnr
@qdnr 2 жыл бұрын
Шо делать если на виеде 7 не работает вс2019, точнее он вообще нехочет скачиватся
@KrutaMan
@KrutaMan 2 жыл бұрын
как то сложно ты решил сделать, должно быть все гораздо проще
@tiredbonesforever
@tiredbonesforever 2 жыл бұрын
прошел б курс но изза яндекса не буду
ПОЧЕМУ ВСЕ ТРЯСЕТСЯ в UNITY ?
39:14
Eccentric Games
Рет қаралды 59 М.
Я сделал онлайн игру за 24 часа!
13:01
Хауди Хо™ - Просто о мире IT!
Рет қаралды 293 М.
To Brawl AND BEYOND!
00:51
Brawl Stars
Рет қаралды 17 МЛН
Мясо вегана? 🧐 @Whatthefshow
01:01
История одного вокалиста
Рет қаралды 7 МЛН
The Best Band 😅 #toshleh #viralshort
00:11
Toshleh
Рет қаралды 22 МЛН
Как сделать указатель на врагов в Unity?
27:28
Подробный урок по Entity Component System в Unity
15:27
Insane One - Разработка игр
Рет қаралды 46 М.
Я СОЗДАЛ 4 ИГРЫ НА 4 ДВИЖКАХ - КАКОЙ ДВИЖОК ЛУЧШИЙ?
7:30
Великие создатели
Рет қаралды 55 М.
Giving Personality to Procedural Animations using Math
15:30
t3ssel8r
Рет қаралды 2,7 МЛН
Делаем кривую Безье в Unity !
14:32
Eccentric Games
Рет қаралды 35 М.
Я сделал 3D Танчики с Денди :3
12:09
Хауди Хо™ - Просто о мире IT!
Рет қаралды 2,5 МЛН
Правила хорошего платформера
6:11
GDev Academy
Рет қаралды 63 М.
Загрузочный экран и смена сцен в Unity 3D
20:59
To Brawl AND BEYOND!
00:51
Brawl Stars
Рет қаралды 17 МЛН