How to do pause in unity3D

Поділитися
Вставка
  • Опубліковано 28 вер 2024
  • Почему делать паузу через timescale плохо и как сделать ее гибко и масштабируемо. Также добавим UI для подсказки игроку, что игра на паузе.
    Ссылка на Discord - / discord
    Весь плейлист по Tower Defense - • Tower Defense tutorial
    Исходный код - github.com/gai...
    Паттерн декоратор - • Паттерн декоратор в un...
    Шейдер лед и замедление - • Добавляем шейдер льда ...
    Как работает корутина - • Как писать асинхронный...
    Как работает таска - • Асинхронное программир...
    Поддержка канала:
    Patreon - www.patreon.co...
    В крипте:
    BTC - 16WmTb4VTFGYrwEjjnMKNNMMzsMB1rPEqD
    ETH - 0x8d35406f8317b846528d0a9ea4a34ce59968dff2
    XRP - rLW9gnQo7BQhU6igk5keqYnH3TVrCxGRzm (TAG - 1438215071)
    LTC- MNSWdzdVsUMnozSU5HhUPEscfxaUK3Fdck
    #unity3d #pause #разработка игр #gamedev #ityoutubersru

КОМЕНТАРІ • 110

  • @ram-1919
    @ram-1919 Рік тому +4

    Было тяжело, но я наконец-то прошёл курс до данного момента. Курс очень качественный и немало улучшил мои навыки как программиста. Я очень благодарен Вам за Вашу работу, в частности, за этот туториал. Удачи Вам во всём! 😄😃😃

  • @ФаридЮсубов-с8ф
    @ФаридЮсубов-с8ф 2 роки тому +21

    Казалось бы, смешно, всего лишь паузу сделать, а ведь хорошую реализацию очень хочется увидеть)

    • @andrey_aka_skif
      @andrey_aka_skif 2 роки тому

      На канале есть видео, как сделать счётчик fps!

  • @alexspeleers
    @alexspeleers 2 роки тому +5

    ти живий там?

  • @vladisslavss
    @vladisslavss 2 роки тому +2

    Отдельный лайк за музыку из SC2🔥

    • @SharkVil
      @SharkVil 2 роки тому +2

      А я такой сижу и думаю сначала - "Сессия ли запущена, или вкладка с Alex007"...

    • @neverworld8815
      @neverworld8815 2 роки тому

      @@SharkVil тоже сразу вспомнил Alexa )

  • @igorboroda1626
    @igorboroda1626 2 роки тому +1

    Думаю это будет что-то вроде интерфейса IPausable + менеджер паузы, который ищет объекты на сцене по интерфейсу или же ссылка на менеджер паузы будет инжектится в объекты через zenject. Впрочем может это быть и классический синглтон.
    Также вполне можем увидеть расширенную версию уже с локальным контролем времени для каждого отдельного объекта.

    • @gaitavr1992
      @gaitavr1992  2 роки тому

      Все верно

    • @alexander_farkas
      @alexander_farkas 2 роки тому

      Хотел написать про абстрактный класс, который в onEnable сам подписывает инстанс на ивент, а onPauseToggled отдает на имплементацию. В нем бы и isPaused объявил.
      Но узнал, что в C# нет аналога mustCallSuper (как в дарте, на котором пишу 99% времени).

    • @Makes074
      @Makes074 2 роки тому

      Коллекция IPausable может быть получена из контейнера DI в менеджере паузы, и останется только реализовать этот интерфейс где нужна пауза

  • @evgeniy4472
    @evgeniy4472 2 роки тому +3

    Насколько правильным является зависимость низкоуровневого обьекта(к примеру игрок) от более высокоуровневого обьекта(PauseManager)?

  • @Raccoon0710
    @Raccoon0710 Рік тому

    Обожаю контент на этом канале, но данная реализация возможно нужна, только для каких нибудь AAA игр. Данную проблему с Тавер Дефендером можно решить за минуту. Я просто ставлю прозрачную картину растянутый на весь UI, ловлю на нем нажатия и выставляю тайм скейл в 0. Как бы красивое не было бы решение это, но оно реально не нужно большинству игр. 😊

    • @Raccoon0710
      @Raccoon0710 Рік тому

      И еще, на нажатие на прозрачную картинку можно выводить надпись.. 🙂

  • @andreyas44
    @andreyas44 2 роки тому +2

    Сразу лайк за тему)

  • @EndLessEmbrace0
    @EndLessEmbrace0 2 роки тому

    Отличная реализация паузы. Вопрос, а почему для fade не использовал dotween?)

  • @vladisslavss
    @vladisslavss 2 роки тому +2

    Круто )
    Спасибо за урок. Вроде бы просто но не просто)
    Почему просто не сделать статический класс паузы и прописывать ее применение в каждом элементе где она требуется?

  • @seamionilyin1644
    @seamionilyin1644 2 роки тому

    Отличное видео. Спасибо

  • @vicktoriashepard
    @vicktoriashepard 2 роки тому

    Вопрос, а если снаряды используют в качестве следа партиклы или trail ? Как их "паузить" ? Писать свои обертки как для аниматора? А разве состояние партиклрв можно "запаузить "?

    • @gaitavr1992
      @gaitavr1992  2 роки тому +1

      Есть у партиклов метод pause

  • @АлексейСтратулат-т8м

    Спаисбо, за полезный ролик. Есть такой вопрос, будете снимать ролики по ООП?

    • @gaitavr1992
      @gaitavr1992  2 роки тому

      Это какие? У меня есть один

    • @АлексейСтратулат-т8м
      @АлексейСтратулат-т8м 2 роки тому

      @@gaitavr1992 Что-то типа ООП от А до Я. Просто всё что я с курса помню, полиморфизм, инкапсуляция и наследование, что касается ООП. А вот зачем интерфейс или абстрактный класс нужен, это вообще.

    • @Bald_Panther
      @Bald_Panther 2 роки тому

      @@gaitavr1992 лучше про ECS и DOTS

    • @evggg
      @evggg 2 роки тому

      @@АлексейСтратулат-т8м а книги почитать? Это ж гораздо быстрее, чем смотреть видео, и информации больше.

  • @boristyulkin8951
    @boristyulkin8951 2 роки тому

    А что даёт избавление от Time.timeScale? Ну то есть для чего нужен этот метод с интерфейсом и менеджером паузы понятно, но почему нельзя было оставить в этой системе Time.timeScale = 0? Какие минусы?

    • @gaitavr1992
      @gaitavr1992  2 роки тому

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

    • @boristyulkin8951
      @boristyulkin8951 2 роки тому

      @@gaitavr1992 понял, спасибо за ответ. Но в целом, если есть потребность остановить время, это не так плохо?

  • @TarantinoDvor
    @TarantinoDvor Рік тому

    Бро плиз продолжи этот курс, сделай монетки за убийство и покупку таверов

  • @lekojoy7016
    @lekojoy7016 Рік тому

    Я ВАС ОБОЖАЮ ПРОСТОООО

  • @evilvirraZzz
    @evilvirraZzz 2 роки тому

    Макс, у меня такая проблема. Событий много и они все разбросаны по проекту. (То есть если в IDE посмотреть ссылки на event bus то почти 2/3 проекта его используют для подписки отписки и вызовов события) Что делать в таком случае? По поводу видоса. Он топ как обычно :) Лучший канал =)

    • @gaitavr1992
      @gaitavr1992  2 роки тому +1

      Постепенно выносить события в модули, которые их используют. Все, что внутри фичи и не должно быть наружу - первые кандидаты

    • @alexsklyarov6792
      @alexsklyarov6792 2 роки тому +4

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

  • @lichlichi
    @lichlichi 2 роки тому

    Почему партиклы не паузили?)

  • @fffas3982
    @fffas3982 2 роки тому

    Интересно, как в таком случае сделать плавную паузу? Типа как с затемнением. Или с физикой и партиклами как быть?

    • @gaitavr1992
      @gaitavr1992  2 роки тому

      Смотря что учувствует в этой паузе, только лишь юай или еще что-то?

    • @fffas3982
      @fffas3982 2 роки тому

      @@gaitavr1992 юай и игровые объекты. В Вашей игре, например, мобы.

    • @gaitavr1992
      @gaitavr1992  2 роки тому

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

  • @yaroslavmakarov2218
    @yaroslavmakarov2218 2 роки тому

    Супер

  • @albertmikhaylyuk7233
    @albertmikhaylyuk7233 2 роки тому

    Музыка из второго старкрафта же?

  • @VentureGalaxy
    @VentureGalaxy 2 роки тому

    Может ты всё же вернёшься к своему каналу? Грустно видеть что такой драгоценный материал не обновляется...

    • @yksi2883
      @yksi2883 2 роки тому +1

      У парня война в стране, какие видео?

  • @АлексейБуров-т7ц

    Реализация хорошая, но по факту рано или поздно забудешь в каком-нибудь объекте проверить на паузу.
    Я решил задачу намного проще - при паузе в любом случае появляется UI, я его и создал, а канву настроил как топ ордер и ScreenSpace.Overlay.
    Также добавил прозрачный background Image с растяжкой на весь экран - в таком случае нет кликабельных мест вне UI.

    • @FAKKER_rap
      @FAKKER_rap Рік тому +1

      На клаве кликабельное место

  • @dihaneeer
    @dihaneeer 2 роки тому

    Ни чего не понял, но очень интересно!

  • @MickelBack888
    @MickelBack888 2 роки тому

    ProjectContext.Instance.PauseManager.SetPaused(isPaused);
    Синглтоны, лучшее, что можно придумать, каеф 😆

    • @evggg
      @evggg 2 роки тому

      Главное, умным словом назвать на манер DI.

    • @gaitavr1992
      @gaitavr1992  2 роки тому

      Может потому что дальше и будет DI?

    • @evggg
      @evggg 2 роки тому

      @@gaitavr1992 Ждем! А сравнение контейнеров будет? А то на первый взгляд вроде всё одно, но люди пишут и пишут новые.

    • @ИванСелютин-п5л
      @ИванСелютин-п5л 2 роки тому

      @@gaitavr1992 ну когда же????

  • @maxvell-gamedeveloper
    @maxvell-gamedeveloper 2 роки тому +2

    Это изи, timescale в помощь

    • @gaitavr1992
      @gaitavr1992  2 роки тому +8

      В этом видел я его как раз выпилю

    • @bibyter6451
      @bibyter6451 2 роки тому

      Но зачем?

    • @bibyter6451
      @bibyter6451 2 роки тому

      Надо лишь ещё ввод залочить и это самый простой вариант

    • @varlamov5264
      @varlamov5264 2 роки тому +1

      А если надо меню паузы с анимациями сделать?

    • @bibyter6451
      @bibyter6451 2 роки тому +1

      @@varlamov5264 unscaled time можно юзать

  • @rulystik
    @rulystik Рік тому

    канал к сожалению умер

  • @Mistor_AHN
    @Mistor_AHN 2 роки тому

    Автор пожалуйста перенеси свои обучающие видео на российский ресурс(-ы) и оставь ссылку, на случай блокировки youtube. Я согласен на многие лишения ,но потерять твой свет учений будет очень больно!

    • @СергійІванов-ш1г
      @СергійІванов-ш1г Рік тому +1

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

    • @Hellscaner
      @Hellscaner Рік тому

      @@СергійІванов-ш1г вас и так Россия поддерживает деньгами, за транзит деньги платят.
      Воюет простой народ которому это нахер не далось, а чинуши которые всё это заварили воруют и наживаются со всех сторон.

  • @dizelman1972
    @dizelman1972 2 роки тому

    Это урок как делать не надо

  • @MultirezGmailCom
    @MultirezGmailCom 2 роки тому +1

    Не увидел ни одной причины зачем городить этот PauseManager, с интерфейсами и связыванием через контекст. У нас есть встроенный функционал от Unity timeScale, который корректно работает с частицами, физикой и всем остальным, что вы ещё даже не решили добавить в проект. Нужно вам проверить в строителе состояние паузы - делаем то же самое свойство IsPaused => timeScale == 0f; Обычно менеджеры подобные PauseManager делают как раз чтобы анимации работали на паузе, для этого можем использовать Time.unscaledDeltaTime и в аниматоре опцию UnscaledTime.

    • @AniViRus
      @AniViRus Рік тому

      Такая пауза может понадобиться в одиночных стратегиях в реальном времени. Например пауза через пробел должна останавливать все, как и пауза через Esc на основе Time.timeScale. Но должна быть способность например отдавать команды юнитам. Или еще лучше - эффект остановки времени, при котором паузе бы подверглась не вся игровая система, а конкретные объекты. Например, в файтинге - все, кроме вызывающего игрока и подконтрольных ему сущностей.
      Единственное - ебля с корутинами. В таком случае можно было бы написать свою CustomYieldOperation, которая была бы аналогом WaitForSeconds, но принимала бы в себя вторым параметром условие, при котором продложался бы обратный отсчет. Лично я так и сделал, даже если бы было бы проще с UniTask

  • @albertshor
    @albertshor 2 роки тому +5

    Обидно, что у такого рукастого блогера, такая небольшая аудитория

    • @MassimoRough
      @MassimoRough 2 роки тому +2

      Делись этим видео в соц сетях, должно помочь.

  • @anatoliy9696
    @anatoliy9696 Рік тому

    Хотел написать SlowMotionService, но мне стало страшно. Как замедлять падение rigidbody, как замедлять эффекты со временем жизни и т.д?

  • @andrey_aka_skif
    @andrey_aka_skif 2 роки тому +2

    Музыка местами очень отвлекает. Кстати, как называется трек? Хочу скачать XD

    • @gaitavr1992
      @gaitavr1992  2 роки тому +3

      Это из старкрафта

  • @Milash001
    @Milash001 2 роки тому +2

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

  • @quddi
    @quddi 2 роки тому +1

    Учитывая, что вы используете постфикс "-Manager", то хотелось бы услышать ваше мнение о рекомендации как раз таки о его НЕ использовании. Спасибо

  • @EnotoButerbrodo
    @EnotoButerbrodo 2 роки тому +3

    ​Очень важное видео. Важная часть игры, общедоступные реализации которой всегда, лично у меня, вызывают чувство плохого кода, костыльности и неудобства. Хотелось бы увидеть правильную реализацию

    • @gaitavr1992
      @gaitavr1992  2 роки тому +7

      Нет правильной реализации) я покажу свое видение

    • @EnotoButerbrodo
      @EnotoButerbrodo 2 роки тому +1

      @@gaitavr1992 безусловно. Но в данном случае можно будет увидеть реализацию от заведомо опытного программиста

    • @alexander_farkas
      @alexander_farkas 2 роки тому

      @@gaitavr1992 Кстати о "правильной" реализации - в Dota 2 во время паузы иногда может сработать тик какого-либо действия (атака, яд), и персонаж умрет во время паузы.
      Хотя, казалось бы, движок писали матерые программисты, и source 2 в принципе достаточно современный.

    • @gaitavr1992
      @gaitavr1992  2 роки тому +1

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

    • @EnotoButerbrodo
      @EnotoButerbrodo 2 роки тому

      @@alexander_farkas Весьма редкий баг, но помимо него видно например, что анимация портрета застывает, кроме движения глаз.

  • @ivan-gorodovoy
    @ivan-gorodovoy 2 роки тому +2

    Великолепное исполнение, спасибо огромное!

  • @nightyonetwothree
    @nightyonetwothree Рік тому

    почему бы просто игровую логику не оставить в FixedUpdate'ах? Которые не будут вызываться при timeScale == 0? Минимум головной боли без костылей. В редких исключениях когда функционал находится в обычных Update и LateUpdate можно сделать проверку на флаг паузы.

  • @МихаилЩёголев-щ9я

    здравствуйте, очень хотелось бы увидеть гайд введение написания scriptable renderer feature.
    я 3д художник и дальше хотелось бы прикоснуться к техарту в юнити, но я столкнулся с проблемой что найти актуальную и понятную информацию по этому направлению довольно трудно

  • @andrewalexart
    @andrewalexart Рік тому

    Подскажите, а здесь используется какой-нибудь паттерн? Или хотя бы часть из какого либо паттерна проектирования.

  • @ЄвгенБезкровний-р3п

    запиши видео про звук, и как его сохранять в Unity, реально ли перевести звук в строку и обратно?

  • @kingofbattleonline
    @kingofbattleonline 2 роки тому

    Максим, я просмотрел все твои видео. Мне очень нравится твой контент. И только ты мне сможешь помочь в моей проблеме. У меня есть задача, в которой нужно использовать все время Instantiate. А как нам известно, это очень сильно много ест ресурсов. У меня есть массив из 10 Image. У них особенный порядок по возрастанию. Это числа, нарисованные в Фотошопе. Начиная от 0 и до 9. Алгоритм из числа строит эти числа в порядке числа. То есть, если был нанесен урон, 116, то мы берём индекс из массива 1, 1 и 6. И вот когда мы берём эти индексы. Происходит вызов Instantiate. Я попробовал закешировать эти числа. Но проблема в том, что когда показывается урон, у него есть таймер до исчезновения. И именно в этот момент, могут ударить ещё кто. И как тут быть? Пул не может включить другие объекты, ведь ещё не истекло время другого урона. До исчезновения. А кешировать ещё и растягивать пул - это все равно что просто использовать Instantiate. Прошу, Максим, помоги в этой задачи. Сразу пишу, что вариант использовать простой текст не подходит. И это не выходи и не как не решит условие задачи. Нужно именно работа с спрайтами или Image.

    • @MrGhost-bg6ud
      @MrGhost-bg6ud Рік тому

      Можно менять спрайтам текстуру при доставании из пула. А с пулом вообще не вижу проблем.
      И нет, растягивать пул не равнозначно созданию через Instantiate.
      Пул растянется до определённого значения, как бы быстро не летели цифры. В перспективе это будет выгоднее.
      Возможно тебе стоит изучить пулы подробнее.

  • @DarkW1zard
    @DarkW1zard 2 роки тому +1

    У тебя там как дела? :(

    • @gaitavr1992
      @gaitavr1992  2 роки тому +5

      У меня в порядке

  • @davidhops3952
    @davidhops3952 2 роки тому

    Как же я долго оттягивал спросить этот вопрос у тимлида) Теперь уже не нужно.Всегда был уверен что таймскейл - не выход

  • @VentureGalaxy
    @VentureGalaxy Рік тому

    Пауза как-то затянулась :(

  • @nickwilde5876
    @nickwilde5876 Рік тому

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

    • @claudiff5581
      @claudiff5581 Рік тому

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

  • @vomgame
    @vomgame Рік тому

    Это получается надо в каждом объекте, в каждом Update, FixedUpdate, LateUpdate, OnCollisionEnter и прочем надо прописать if(PauseManager.IsPaused){return;}. Способ так то хорош, если этих событий мало. Где же ты золотая середина

    • @nightyonetwothree
      @nightyonetwothree Рік тому

      FixedUpdate не вызывается при timeScale 0, и не зависит от фреймрейта. Лучшее комбо для паузы, по-прежнему. Золото имхо

  • @neverworld8815
    @neverworld8815 2 роки тому

    Старкрафт

  • @КириллЕвстратов-е2л

    По шейдерам. Будет ли видео о том, как переписать шейдер из 3D проекта, чтобы работал в URP ? Я постоянно с такой проблемой сталкиваюсь, а как сделать , материала нету ((

    • @gaitavr1992
      @gaitavr1992  2 роки тому

      Если умеете колом писать шейдера, то в графе нет проблем вообще

  • @ichbinschlange
    @ichbinschlange 2 роки тому

    Стало интересно, что такого можно наворотить с паузой. Казалось бы, создай state-машину, которая будет говорить кому надо "Стой собака" и делов то.

    • @ichbinschlange
      @ichbinschlange 2 роки тому

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

  • @Driftmaniak_UA
    @Driftmaniak_UA 2 роки тому

    Будем обновлять пачку объектов руками?)

  • @aTechRoar
    @aTechRoar Рік тому

    Последний видос 8 месяцев назад. Канал всё?

    • @T1rfi
      @T1rfi Рік тому +3

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

    • @JuggernautWare
      @JuggernautWare Рік тому

      Может погиб

    • @Saltant
      @Saltant Рік тому

      @@JuggernautWare Дада щас бы программистами в окопах сидеть, нет дружок, таких там нет, все или с белыми билетами или учатся в вузах с отсрочками или живут сейчас за пределами Украины.

  • @butorindaniil
    @butorindaniil 2 роки тому

    Круто получилось! Но так сразу и не понятно о чем видео, мне кажется Вам бы превью улучшить не помешало) Могу попробовать сделать, первую бесплатно, а потом по 300 рублей за работу. Я уже сотрудничаю с несколькими блогерами, жалоб нет. Все работы и заказы могу предоставить) Пишите в телеграмм или в вк, ссылки есть на канале.

  • @sergeyivanov3967
    @sergeyivanov3967 2 роки тому +1

    Спасибо, что не удалил канал. Сподіваюся продовжиш його після Перемоги, але вже, звісно, українською мовою.