How to do pause in unity3D

2022 ж. 19 Ақп.
17 528 Рет қаралды

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

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

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

    @ram-1919@ram-1919 Жыл бұрын
    • что за курс?

      @maksimsazanovich6087@maksimsazanovich6087 Жыл бұрын
  • Сразу лайк за тему)

    @andreyas44@andreyas442 жыл бұрын
  • Лайк и коммент для продвижения отличного канала!😊

    @Milash001@Milash0012 жыл бұрын
  • Отличное видео. Спасибо

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

    @user-dv5ue1om3m@user-dv5ue1om3m2 жыл бұрын
    • На канале есть видео, как сделать счётчик fps!

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

    @EndLessEmbrace0@EndLessEmbrace02 жыл бұрын
  • Отдельный лайк за музыку из SC2🔥

    @vladisslavss@vladisslavss2 жыл бұрын
    • А я такой сижу и думаю сначала - "Сессия ли запущена, или вкладка с Alex007"...

      @SharkVil@SharkVil2 жыл бұрын
    • @@SharkVil тоже сразу вспомнил Alexa )

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

    @quddi@quddi Жыл бұрын
  • Я ВАС ОБОЖАЮ ПРОСТОООО

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

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

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

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

    @vladisslavss@vladisslavss2 жыл бұрын
  • запиши видео про звук, и как его сохранять в Unity, реально ли перевести звук в строку и обратно?

    @user-mo7lk7gi2u@user-mo7lk7gi2u Жыл бұрын
  • Обидно, что у такого рукастого блогера, такая небольшая аудитория

    @user-cm9hc5kn4i@user-cm9hc5kn4i2 жыл бұрын
    • Делись этим видео в соц сетях, должно помочь.

      @MaksMikhnevych@MaksMikhnevych2 жыл бұрын
  • Если добавить в игру замедление или ускорение времени, то пауза через Time.timescale будет всё ломать, так что это плохой вариант.

    @TheJoker-hm2ip@TheJoker-hm2ip2 ай бұрын
  • Хотел написать SlowMotionService, но мне стало страшно. Как замедлять падение rigidbody, как замедлять эффекты со временем жизни и т.д?

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

    @user-ls7oo8mk6k@user-ls7oo8mk6k2 жыл бұрын
    • Нет правильной реализации) я покажу свое видение

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

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

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

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

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

    @igorboroda1626@igorboroda16262 жыл бұрын
    • Все верно

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

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

      @Makes074@Makes0742 жыл бұрын
  • Супер

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

    @Raccoon0710@Raccoon0710 Жыл бұрын
    • И еще, на нажатие на прозрачную картинку можно выводить надпись.. 🙂

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

    @user-yi7mq7fd1c@user-yi7mq7fd1c2 жыл бұрын
    • Если умеете колом писать шейдера, то в графе нет проблем вообще

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

    @nightyonetwothree@nightyonetwothree Жыл бұрын
  • ти живий там?

    @alexspeleers@alexspeleers2 жыл бұрын
    • Так

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

    @vicktoriashepard@vicktoriashepard2 жыл бұрын
    • Есть у партиклов метод pause

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Музыка местами очень отвлекает. Кстати, как называется трек? Хочу скачать XD

    @andrey_aka_skif@andrey_aka_skif2 жыл бұрын
    • Это из старкрафта

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

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

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

      @alexsklyarov6792@alexsklyarov67922 жыл бұрын
  • Почему партиклы не паузили?)

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

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

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

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

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

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

      @boristyulkin8951@boristyulkin89512 жыл бұрын
  • Бро плиз продолжи этот курс, сделай монетки за убийство и покупку таверов

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

    @fffas3982@fffas39822 жыл бұрын
    • Смотря что учувствует в этой паузе, только лишь юай или еще что-то?

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

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

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

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

      @nightyonetwothree@nightyonetwothree Жыл бұрын
  • Будем обновлять пачку объектов руками?)

    @Driftmaniak_UA@Driftmaniak_UA2 жыл бұрын
    • Типо того)

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Старкрафт

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

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

      @ichbinschlange@ichbinschlange2 жыл бұрын
  • Ни чего не понял, но очень интересно!

    @dihaneeer@dihaneeer2 жыл бұрын
    • Прискорбно

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

    @user-ye9ux5xc7y@user-ye9ux5xc7y2 жыл бұрын
    • Это какие? У меня есть один

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

      @user-ye9ux5xc7y@user-ye9ux5xc7y2 жыл бұрын
    • @@gaitavr1992 лучше про ECS и DOTS

      @Bald_Panther@Bald_Panther2 жыл бұрын
    • @@user-ye9ux5xc7y а книги почитать? Это ж гораздо быстрее, чем смотреть видео, и информации больше.

      @evggg@evggg2 жыл бұрын
  • Музыка из второго старкрафта же?

    @albertmikhaylyuk7233@albertmikhaylyuk72332 жыл бұрын
    • Да

      @gaitavr1992@gaitavr19922 жыл бұрын
    • @@gaitavr1992 в таком случае "уважение +"

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

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

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

    @VentureGalaxy@VentureGalaxy2 жыл бұрын
    • У парня война в стране, какие видео?

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

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

      @claudiff5581@claudiff5581 Жыл бұрын
  • Пауза как-то затянулась :(

    @VentureGalaxy@VentureGalaxy Жыл бұрын
  • Последний видос 8 месяцев назад. Канал всё?

    @TechRoar1@TechRoar1 Жыл бұрын
    • Судя по говору человек с украины, думаю ему сейчас не до нас.

      @T1rfi@T1rfi Жыл бұрын
    • Может погиб

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

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

    @MickelBack888@MickelBack8882 жыл бұрын
    • Главное, умным словом назвать на манер DI.

      @evggg@evggg2 жыл бұрын
    • Может потому что дальше и будет DI?

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

      @evggg@evggg2 жыл бұрын
    • @@gaitavr1992 ну когда же????

      @user-hu2vm8vx2n@user-hu2vm8vx2n Жыл бұрын
  • У тебя там как дела? :(

    @DarkW1zard@DarkW1zard2 жыл бұрын
    • У меня в порядке

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

    @user-ih3xv6mx5p@user-ih3xv6mx5p Жыл бұрын
    • На клаве кликабельное место

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

    @butorindaniil@butorindaniil2 жыл бұрын
  • Это изи, timescale в помощь

    @maxvell-gamedeveloper@maxvell-gamedeveloper2 жыл бұрын
    • В этом видел я его как раз выпилю

      @gaitavr1992@gaitavr19922 жыл бұрын
    • Но зачем?

      @bibyter6451@bibyter64512 жыл бұрын
    • Надо лишь ещё ввод залочить и это самый простой вариант

      @bibyter6451@bibyter64512 жыл бұрын
    • А если надо меню паузы с анимациями сделать?

      @varlamov5264@varlamov52642 жыл бұрын
    • @@varlamov5264 unscaled time можно юзать

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

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

      @user-kj6cr9xi5o@user-kj6cr9xi5o Жыл бұрын
    • @@user-kj6cr9xi5o вас и так Россия поддерживает деньгами, за транзит деньги платят. Воюет простой народ которому это нахер не далось, а чинуши которые всё это заварили воруют и наживаются со всех сторон.

      @Hellscaner@Hellscaner Жыл бұрын
  • Это урок как делать не надо

    @dizelman1972@dizelman19722 жыл бұрын
  • канал к сожалению умер

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

    @sergeyivanov3967@sergeyivanov3967 Жыл бұрын
KZhead