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

Поделиться
HTML-код
  • Опубликовано: 23 дек 2024

Комментарии • 102

  • @Tumanop
    @Tumanop 2 года назад +47

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

    • @52RK
      @52RK 2 года назад +8

      В том числе, если родились девочками

    • @iamskoi
      @iamskoi 2 года назад +1

      Еще бы эта ссылка была бы на гитхаб - цены бы не было)

    • @SERG__ZV
      @SERG__ZV 2 года назад +2

      Слушай займи мне 100 тысяч клянусь я тебе миллион в следующей жизни отдам.

  • @KESSme
    @KESSme 2 года назад +9

    Очень интересная реализация интересной механики.
    Также хотел сказать спасибо за бесплатный курс по разработке браузерных игр на Unity (На яндексе), тоже очень интересно и полезно!

  • @Elvisasha
    @Elvisasha 2 года назад +2

    Прекрасно! Я уже пробовал подобное написать, но потом уперся в то, что на линии может быть несколько пересечений, полез исправлять, по дороге пооптимизировал производительность, и все вообще перестало работать. А потом на работе начался завал и я забросил идею реанимировать алгоритм :( Я вот кстати не знал, что коллайдер умеет генерировать меш и писал генерацию руками, спасибо, что подсказал! Надо будет сделать вторую попытку написать.
    * и да, лайк/подписка обязательно!

  • @WeslomPo
    @WeslomPo 2 года назад +3

    Код взятия пути с коллайдера следовало в LineFromCollider пересунуть. Этот код повторяется несколько раз и используется для подготовки данных для этого метода.
    Ну и как бы можно еще пару десятков замечаний сделать, по поводу качества кода и оптимизаций. Но не буду.
    Неплохо разобрал алгоритм, лайк, подписка.

  • @einstein6451
    @einstein6451 2 года назад +1

    Ох не зря я подписался на этот канал. Просто недавно искал видосы про физику т.к. хотел в 3д порпактиковаться. А тут видос новый.

  • @titanovsky
    @titanovsky 2 года назад +2

    Большое спасибо, как раз сейчас изучаю Unity для разработки игр, чтобы потом найти работу по данной специальности. Мне формулы внутри метода по поиску пересечения, прям напомнили один момент, где нужно было реализовать нажатие на 2D панель в 3D пространстве, я сначала подумал, может просто локализировать HitPos взгляда игрока относительно 2D панели, но когда увидел реализацию, там всё куда было сложнее, и очень аналогично тому, что в поиске по пересечению. Лайк и подписка :)

  • @iamskoi
    @iamskoi 2 года назад +2

    Вот ни разу не разработчик игр, но очень интересно смотреть такие видео, с рассуждениями, алгоритмами. Огромное спасибо автору! Лайк и подписка на канал. Пойду остальные видео смотреть) А, еще: исходники лучше все же кидать на гитхаб:)

    • @EccentricGames
      @EccentricGames  2 года назад +1

      Спасибо) А какая разница? так и так скачивать нужно один и тот же объем информации. И столько же кнопок нажимать. Ну т.е. есть некоторый процент людей, которым нужно пояснить как скачивать с гита. А есть те кто умеют и им без разницы как скачать. Вот и выбор для меня очевиден как прикрепить

  • @legotechnicbuilderua7692
    @legotechnicbuilderua7692 2 года назад +1

    Спасибо Огромное! Давно ждал новых видео! Возможности этой механики огромные, обязательно где-то использую!

  • @darkModeYT
    @darkModeYT 2 года назад +8

    Идеально! Очень давно ждал!! Спасибо ❤

  • @PavelNebo
    @PavelNebo 2 года назад +1

    Круто, алгоритм отличный, было интересно помсмотреть. Даже захотелось в Юнити вернуться)) ты мотивируешь !

  • @janiksuper
    @janiksuper 2 года назад +2

    Как всегда на высоте, очень познавательно и всё по делу, браво!

  • @vernoyakira3611
    @vernoyakira3611 2 года назад +1

    Красавчик! Рад что ты стал чуть более медийным)

  • @МаксимЛогинов-ъ6т
    @МаксимЛогинов-ъ6т 2 года назад +1

    Ох заморочился ты конечно) Хорош 💪

  • @Roman_SBB
    @Roman_SBB 2 года назад +1

    Отличная новость про курс. Большое спасибо за труд!

  • @joblik
    @joblik 2 года назад +2

    Приятно видеть интересные видео)

  • @seregaplay1770
    @seregaplay1770 2 года назад +1

    Ура! Снова видео начали выходить

  • @SergKoster
    @SergKoster 2 года назад +1

    Недавно начал смотреть твои видео, а ты в честь этого решил снять видео)

  • @JuggernautWare
    @JuggernautWare 2 года назад +2

    Спасибо за курс!

  • @neverworld8815
    @neverworld8815 2 года назад

    Очень круто, всегда хотелось это сделать но руки не доходили а тут прям как подарочек, спасибо автору !

  • @gecreator412
    @gecreator412 Год назад +1

    Ну это конечно простой вариант алгоритма. Здесь будет очень много ошибок(которых на первый взгляд не видно), что будет приводить к полному исчезновению формы из-за ошибок триангуляции и соответственно ошибок декомпозинга для concave форм физики. Будет не очень весело если в релизной версии игры при стрельбе из гранатамёта у пользователя исчезнет пол карты. Также нет реализации отверстий внутри форм(для этого нужно будет нарезать форму на де части или более). Там очень много подводных камней из-за ошибок округления положения вершин(сохраняете в файл все вершины(всё работает), загружаете уже нет(welcome to float hell)). Вообщем что-бы сделать игру с подобным движком поверхностей, нужно не пару дней. Пол года минимум жесткой разработки и тестов.

  • @dopehype
    @dopehype 2 года назад +1

    очень круто это же надо в уме было всё обработать и придумать как всё будет взаимодействовать

  • @lobster133
    @lobster133 2 года назад +1

    За курс больше спасибо

  • @Milash001
    @Milash001 2 года назад +1

    Лайк и коммент в поддержку канала!😊

  • @moreokean
    @moreokean 2 года назад +3

    Почему перестает работать, если подвинуть объект Land, изменив его Position в Transform? Если позиция Land не (0,0,0) - не работает. Например, если нужно добавить второй объект Land рядом с другими координатами. Как их учитывать?

    • @moreokean
      @moreokean 2 года назад

      Всё стало работать, если в компоненте Land.cs после _colliderRenderer.CreateMesh(); обнулять позицию коллайдера _collider.transform.position = new Vector3(0f,0f,0f);
      Интересно, почему так?

  • @andrewsemenenko8826
    @andrewsemenenko8826 2 года назад

    Объяснение просто супер!
    Люблю математические задачи, в часности задачи на графах!
    Прикольно, что ключ к решению этой проблемы - порядок следования по часовой или против часовой стрелки, чесно не подумал об этом.
    Скорее всего тот алгоритм, который ты нашел широко известен и используется в таких программах, как тот же фотошоп🤔
    В общем огромное спасибо!

  • @TorisNik
    @TorisNik Год назад

    Круто, даже курс, ну все) мир, жди моих игр)

  • @Krol_one
    @Krol_one 2 года назад

    5 точка ! лучший ! ;) спасибо за видосы ! Продолжай радовать нас своими шуткосами ;)

  • @VirtexR
    @VirtexR 2 года назад +1

    Очень жду каких-нибуть еще уроков)

  • @shmadzilla
    @shmadzilla 2 года назад +1

    Классные ролики. Очень интересно. Развивай тему! Что-то типа "игра за полчаса"

  • @iOzz
    @iOzz Год назад +1

    Прочти полностью)
    Гениально). Я искал похожий материал год назад). Я всеми 5ю руками за вторую часть ролика с оптимизацией кода. Могу тут скинуть пару вариантов. Но я не могу сам допилить и не могу избавится от бага, когда ломается меш.
    * Вот полу-осмысленные наброски в теории
    Объединить два цикла, которые перебирают сегменты landLine и CircleLine. Это сократит количество итераций вдвое.
    А вместо использования списка для хранения точек использовать набор хэшей. Это позволит проверить, существует ли уже точка в наборе, за постоянное время, а не за линейное время, как в случае со списком.
    Вместо того, чтобы перебирать точки на линиях и проверять, являются ли они пересечениями, можно создать отдельный список точек пересечения. Это позволит перебирать только пересечения, а не все точки на линиях.
    Можно рассмотреть возможность использования более эффективного алгоритма обнаружения пересечений, например алгоритма Бентли-Оттмана. Этот алгоритм имеет временную сложность O(n log n) для n сегментов, что может быть быстрее, чем текущий алгоритм для большого количества сегментов.
    Возможно использование структуры данных пространственного индексирования, такой как дерево квадрантов или дерево k-d, для хранения сегментов и быстрого поиска пересечений. Это может значительно сократить количество итераций и повысить производительность алгоритма

    • @iOzz
      @iOzz Год назад

      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 9 месяцев назад +1

      друг, я весь твой коммент заскринил и в рамочку сейчас вставлю, xD

    • @iOzz
      @iOzz 9 месяцев назад

      😅 жесть я тут расписал)) не помню уже@@Scriberrot

  • @Kirvun
    @Kirvun 2 года назад +2

    Илья выпускает новый ролик.
    Синоптики объявляют неделю игр про червячков, игры с похожей механикой будут выходит в два раза чаще ))

  • @user-gm3gt7cl2y
    @user-gm3gt7cl2y 2 года назад

    Очень круто! Ты молодец! 🔥

  • @Domino0s0
    @Domino0s0 2 года назад +2

    Привет ,классный ролик!

  • @НикитаМордик-к8ф
    @НикитаМордик-к8ф 2 года назад +1

    крутое видео, спасибо за старания

  • @vladimirkalugin-devstudio9721
    @vladimirkalugin-devstudio9721 2 года назад

    Спасибо за туториалы которые делаешь) рад видеть успехи)

  • @lautarocabral8710
    @lautarocabral8710 Год назад

    Amazing! Thanks for this content!

  • @OniGameDev
    @OniGameDev 2 года назад

    Ого, какой классный новый урок!
    Приятно было снова услышать от тебя полезную и интересную информацию)

  • @namen6535
    @namen6535 2 года назад +1

    круто, как всегда)

  • @Agranam
    @Agranam 2 года назад +2

    Это мегоофигенно!)

  • @borisvaschenko7585
    @borisvaschenko7585 2 года назад +1

    Спасибо большое!!

  • @heavyCO33
    @heavyCO33 2 года назад

    Интересный проект и реализация 👍👍👍

  • @LexaSt86
    @LexaSt86 2 года назад +1

    Очень круто!

  • @NeHacker
    @NeHacker Месяц назад

    А в 3D с видом сверху можно тоже так или там другой подход нужен?

  • @sanosanbaby
    @sanosanbaby Год назад

    скорей всего будет некорректно работать при реберных пересечениях, почему не использовать Clipper Library, которая специально создана для выполнения булевых операций над полигонами (объединение, пересечение, вычитание, исключающее ИЛИ) и смещения контуров полигонов на основе алгоритма Вейлера-Азертона

  • @kirillen0tik350
    @kirillen0tik350 2 года назад

    Классно было бы посмотреть продолжение, как ты делал б из техно-демки в рабочую игру

  • @_mirai
    @_mirai 2 года назад +2

    хотел лечь пораньше, но видно не судьба

  • @gm_Maker
    @gm_Maker 2 года назад +1

    Офигеть... Спасть отменяется :)

  • @Nikita_Pro89
    @Nikita_Pro89 2 года назад +1

    Круто конечно)))

  • @java198626
    @java198626 Год назад

    Огромное спасибо за пример пример проекта. Если нажимать ПКМ, то да мэш перестраивается и все отлично работает, но лишь при однократном нажатии, если же сделать изменение каждый кадр, т.е. пока кнопка зажата, чтобы как бы рисовать дыры в мэше кистью, то Юнити крашится. а алгоритм начинает неверно рассчитывать Мэш. Не решали ли Вы или кто здесь эту проблему, поделитесь пожалуйста, если удалось у кого решит ее. Заранее Спасибо.

  • @Driftmaniak_UA
    @Driftmaniak_UA 2 года назад

    А смог бы сделать гонки с физикой как в F-Zero?)

  • @insoaryt
    @insoaryt Год назад

    А нет ли какого-то другого способа создавать/редактировать 2д меши, кроме как тащить их из коллайдера? Имхо меш в данном деле - первичен. И по-хорошему коллайдер при создании должен откуда-то его получать, а не раздавать.

  • @alekseyn7866
    @alekseyn7866 2 года назад +1

    Коллеги, кто знает: в стим можно выпустить бесплатную игру со встроенной рекламой или там это запрещено?

    • @zuzuBoba
      @zuzuBoba 2 года назад

      тоже интересно 😅

  • @Martin-bh6uq
    @Martin-bh6uq 2 года назад

    Чувак ты крутой!

  • @bezinteresa6806
    @bezinteresa6806 2 года назад +1

    Илья лучший

  • @wofo_industry
    @wofo_industry 2 года назад +1

    Хм, интересно а насколько производительно будет в трехмерном пространстве

    • @zuzuBoba
      @zuzuBoba 2 года назад

      смотря сколько точек у вырезающей фигуры)

  • @Darksanderst
    @Darksanderst 2 года назад +1

    Неожиданно)

  • @andrzejhubski3629
    @andrzejhubski3629 2 года назад

    Блин где же ты год назад был…

  • @BockJlucuii
    @BockJlucuii 2 года назад

    Круто!

  • @jil635
    @jil635 2 года назад

    Можно реализовать достаточно быстрый метод с пикселями, нужно только знать как пользоваться вычислительными шейдерами)

    • @jil635
      @jil635 6 месяцев назад

      @@СветозарБоголюбов все там же, в вычислительных шейдерах

  • @4rtochka
    @4rtochka 2 года назад +2

    Интересно , как они это на sega сделали

    • @ОскарСамойлов
      @ОскарСамойлов 2 года назад

      там подмена спрайта с помощью маски, как я себе это представляю

  • @romantroshkov4854
    @romantroshkov4854 2 года назад

    Красавчик!

  • @Kitsikoo
    @Kitsikoo 2 года назад +1

    Изобрёл Boolean)

  • @dclxviclan
    @dclxviclan 2 года назад

    All my childhood in one video

  • @SPORTCHEER
    @SPORTCHEER 2 года назад

    о круто с яндексом калаба)

  • @jcdentonalexmelyon3664
    @jcdentonalexmelyon3664 2 года назад

    Оч круто

  • @igorshlyakov9321
    @igorshlyakov9321 2 года назад +1

    Очень сложно... я мозг взорвал..., но оторваться не могу

  • @ko-games7768
    @ko-games7768 2 года назад +2

    Давай Worms в 3D.

  • @qdnr
    @qdnr 2 года назад

    Шо делать если на виеде 7 не работает вс2019, точнее он вообще нехочет скачиватся

  • @DimokFa
    @DimokFa 2 года назад +3

    Теперь чмыри Сакутина, как он чмырит Хауди Хо.

    • @Tumanop
      @Tumanop 2 года назад +2

      Благородный человек не смеётся над юродивами.
      Так говорил Конфуций

    • @gm_Maker
      @gm_Maker 2 года назад

      😂

    • @igorshlyakov9321
      @igorshlyakov9321 2 года назад

      Они друзья, на сколько я помню)

    • @igorshlyakov9321
      @igorshlyakov9321 2 года назад

      @Вин Ты назвал его глупцом, но сделал это без уважения)))

  • @Xtonior
    @Xtonior 2 года назад +1

    Блин, наверное прошу много, но было бы лучше ссылку на гитхаб, что бы не качать проект)

  • @igort1642
    @igort1642 2 года назад +1

    Отсыпьте лукасов, да побольше!))

  • @EmeraldForestCat
    @EmeraldForestCat Год назад

    Возможно в оригинальных червяках используется что то вроде текстуры части которой исчезают с помощью альфа канала. То есть взрыв по своей сути похож на кисточку в фотошопе. Наверно этот вариант и сейчас должен работать очень стабильно.

  • @gamebit3762
    @gamebit3762 2 года назад +2

    почему всё на гениальном языке?

  • @modjaid3907
    @modjaid3907 2 года назад +1

    Вормс с нуля за два дня?! Это точно туториал? Или просто психологическое уничтожение средненьких разработчиков?

  • @vitaly6838
    @vitaly6838 2 года назад +2

    Создал булевы операции с нуля

  • @АааАаа-о2ы
    @АааАаа-о2ы 2 года назад +1

    Привет

  • @Obelardos2
    @Obelardos2 2 года назад

    Интересная задача и хорошее объяснение. Но в бою (не в туториале) такой код с объектами на каждый шаг, листами, linq и тд не годится, еще нужно оптимизировать теперь все это по памяти.
    А так супер!

  • @KrutaMan
    @KrutaMan Год назад

    как то сложно ты решил сделать, должно быть все гораздо проще

  • @tiredbonesforever
    @tiredbonesforever 2 года назад

    прошел б курс но изза яндекса не буду