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
Было тяжело, но я наконец-то прошёл курс до данного момента. Курс очень качественный и немало улучшил мои навыки как программиста. Я очень благодарен Вам за Вашу работу, в частности, за этот туториал. Удачи Вам во всём! 😄😃😃
что за курс?
Казалось бы, смешно, всего лишь паузу сделать, а ведь хорошую реализацию очень хочется увидеть)
На канале есть видео, как сделать счётчик fps!
ти живий там?
Так
Отдельный лайк за музыку из SC2🔥
А я такой сижу и думаю сначала - "Сессия ли запущена, или вкладка с Alex007"...
@@SharkVil тоже сразу вспомнил Alexa )
Думаю это будет что-то вроде интерфейса IPausable + менеджер паузы, который ищет объекты на сцене по интерфейсу или же ссылка на менеджер паузы будет инжектится в объекты через zenject. Впрочем может это быть и классический синглтон.
Также вполне можем увидеть расширенную версию уже с локальным контролем времени для каждого отдельного объекта.
Все верно
Хотел написать про абстрактный класс, который в onEnable сам подписывает инстанс на ивент, а onPauseToggled отдает на имплементацию. В нем бы и isPaused объявил.
Но узнал, что в C# нет аналога mustCallSuper (как в дарте, на котором пишу 99% времени).
Коллекция IPausable может быть получена из контейнера DI в менеджере паузы, и останется только реализовать этот интерфейс где нужна пауза
Насколько правильным является зависимость низкоуровневого обьекта(к примеру игрок) от более высокоуровневого обьекта(PauseManager)?
Обожаю контент на этом канале, но данная реализация возможно нужна, только для каких нибудь AAA игр. Данную проблему с Тавер Дефендером можно решить за минуту. Я просто ставлю прозрачную картину растянутый на весь UI, ловлю на нем нажатия и выставляю тайм скейл в 0. Как бы красивое не было бы решение это, но оно реально не нужно большинству игр. 😊
И еще, на нажатие на прозрачную картинку можно выводить надпись.. 🙂
Сразу лайк за тему)
Отличная реализация паузы. Вопрос, а почему для fade не использовал dotween?)
Круто )
Спасибо за урок. Вроде бы просто но не просто)
Почему просто не сделать статический класс паузы и прописывать ее применение в каждом элементе где она требуется?
Отличное видео. Спасибо
Вопрос, а если снаряды используют в качестве следа партиклы или trail ? Как их "паузить" ? Писать свои обертки как для аниматора? А разве состояние партиклрв можно "запаузить "?
Есть у партиклов метод pause
Спаисбо, за полезный ролик. Есть такой вопрос, будете снимать ролики по ООП?
Это какие? У меня есть один
@@gaitavr1992 Что-то типа ООП от А до Я. Просто всё что я с курса помню, полиморфизм, инкапсуляция и наследование, что касается ООП. А вот зачем интерфейс или абстрактный класс нужен, это вообще.
@@gaitavr1992 лучше про ECS и DOTS
@@АлексейСтратулат-т8м а книги почитать? Это ж гораздо быстрее, чем смотреть видео, и информации больше.
А что даёт избавление от Time.timeScale? Ну то есть для чего нужен этот метод с интерфейсом и менеджером паузы понятно, но почему нельзя было оставить в этой системе Time.timeScale = 0? Какие минусы?
Мне не нужно, чтобы глобально время останавливалось. У меня будет куча мест, где оно будет использоваться во время паузы
@@gaitavr1992 понял, спасибо за ответ. Но в целом, если есть потребность остановить время, это не так плохо?
Бро плиз продолжи этот курс, сделай монетки за убийство и покупку таверов
Я ВАС ОБОЖАЮ ПРОСТОООО
Макс, у меня такая проблема. Событий много и они все разбросаны по проекту. (То есть если в IDE посмотреть ссылки на event bus то почти 2/3 проекта его используют для подписки отписки и вызовов события) Что делать в таком случае? По поводу видоса. Он топ как обычно :) Лучший канал =)
Постепенно выносить события в модули, которые их используют. Все, что внутри фичи и не должно быть наружу - первые кандидаты
@@gaitavr1992, спасибо за видео, по поводу модулей, возможно ты уже рассказывал про это, было бы отлично, если запишешь отдельное видео, как лучше проектировать эти самые модули, с примерами, что можно вынести в модули, для понятности.
Почему партиклы не паузили?)
Интересно, как в таком случае сделать плавную паузу? Типа как с затемнением. Или с физикой и партиклами как быть?
Смотря что учувствует в этой паузе, только лишь юай или еще что-то?
@@gaitavr1992 юай и игровые объекты. В Вашей игре, например, мобы.
Метод уже есть у мобов для работы паузы. Я бы сделал асинхронным вызов паузы, чтобы всех обработчиков ждали
Супер
Музыка из второго старкрафта же?
Да
@@gaitavr1992 в таком случае "уважение +"
Может ты всё же вернёшься к своему каналу? Грустно видеть что такой драгоценный материал не обновляется...
У парня война в стране, какие видео?
Реализация хорошая, но по факту рано или поздно забудешь в каком-нибудь объекте проверить на паузу.
Я решил задачу намного проще - при паузе в любом случае появляется UI, я его и создал, а канву настроил как топ ордер и ScreenSpace.Overlay.
Также добавил прозрачный background Image с растяжкой на весь экран - в таком случае нет кликабельных мест вне UI.
На клаве кликабельное место
Ни чего не понял, но очень интересно!
Прискорбно
ProjectContext.Instance.PauseManager.SetPaused(isPaused);
Синглтоны, лучшее, что можно придумать, каеф 😆
Главное, умным словом назвать на манер DI.
Может потому что дальше и будет DI?
@@gaitavr1992 Ждем! А сравнение контейнеров будет? А то на первый взгляд вроде всё одно, но люди пишут и пишут новые.
@@gaitavr1992 ну когда же????
Это изи, timescale в помощь
В этом видел я его как раз выпилю
Но зачем?
Надо лишь ещё ввод залочить и это самый простой вариант
А если надо меню паузы с анимациями сделать?
@@varlamov5264 unscaled time можно юзать
канал к сожалению умер
Автор пожалуйста перенеси свои обучающие видео на российский ресурс(-ы) и оставь ссылку, на случай блокировки youtube. Я согласен на многие лишения ,но потерять твой свет учений будет очень больно!
Лучше сами найдите пиратский ресурс для скачивания видео с ютуба, а то, что Вы предлагаете, поддерживало бы деньгами российскую армию (через налоги).
@@СергійІванов-ш1г вас и так Россия поддерживает деньгами, за транзит деньги платят.
Воюет простой народ которому это нахер не далось, а чинуши которые всё это заварили воруют и наживаются со всех сторон.
Это урок как делать не надо
Не увидел ни одной причины зачем городить этот PauseManager, с интерфейсами и связыванием через контекст. У нас есть встроенный функционал от Unity timeScale, который корректно работает с частицами, физикой и всем остальным, что вы ещё даже не решили добавить в проект. Нужно вам проверить в строителе состояние паузы - делаем то же самое свойство IsPaused => timeScale == 0f; Обычно менеджеры подобные PauseManager делают как раз чтобы анимации работали на паузе, для этого можем использовать Time.unscaledDeltaTime и в аниматоре опцию UnscaledTime.
Такая пауза может понадобиться в одиночных стратегиях в реальном времени. Например пауза через пробел должна останавливать все, как и пауза через Esc на основе Time.timeScale. Но должна быть способность например отдавать команды юнитам. Или еще лучше - эффект остановки времени, при котором паузе бы подверглась не вся игровая система, а конкретные объекты. Например, в файтинге - все, кроме вызывающего игрока и подконтрольных ему сущностей.
Единственное - ебля с корутинами. В таком случае можно было бы написать свою CustomYieldOperation, которая была бы аналогом WaitForSeconds, но принимала бы в себя вторым параметром условие, при котором продложался бы обратный отсчет. Лично я так и сделал, даже если бы было бы проще с UniTask
Обидно, что у такого рукастого блогера, такая небольшая аудитория
Делись этим видео в соц сетях, должно помочь.
Хотел написать SlowMotionService, но мне стало страшно. Как замедлять падение rigidbody, как замедлять эффекты со временем жизни и т.д?
Музыка местами очень отвлекает. Кстати, как называется трек? Хочу скачать XD
Это из старкрафта
Лайк и коммент для продвижения отличного канала!😊
Учитывая, что вы используете постфикс "-Manager", то хотелось бы услышать ваше мнение о рекомендации как раз таки о его НЕ использовании. Спасибо
Очень важное видео. Важная часть игры, общедоступные реализации которой всегда, лично у меня, вызывают чувство плохого кода, костыльности и неудобства. Хотелось бы увидеть правильную реализацию
Нет правильной реализации) я покажу свое видение
@@gaitavr1992 безусловно. Но в данном случае можно будет увидеть реализацию от заведомо опытного программиста
@@gaitavr1992 Кстати о "правильной" реализации - в Dota 2 во время паузы иногда может сработать тик какого-либо действия (атака, яд), и персонаж умрет во время паузы.
Хотя, казалось бы, движок писали матерые программисты, и source 2 в принципе достаточно современный.
Код асинхронный, может что то пролезть, еще и мультиплеер все усугубляет. Сообщения о паузе и яде могут прийти в разных сообщениях сервера
@@alexander_farkas Весьма редкий баг, но помимо него видно например, что анимация портрета застывает, кроме движения глаз.
Великолепное исполнение, спасибо огромное!
почему бы просто игровую логику не оставить в FixedUpdate'ах? Которые не будут вызываться при timeScale == 0? Минимум головной боли без костылей. В редких исключениях когда функционал находится в обычных Update и LateUpdate можно сделать проверку на флаг паузы.
здравствуйте, очень хотелось бы увидеть гайд введение написания scriptable renderer feature.
я 3д художник и дальше хотелось бы прикоснуться к техарту в юнити, но я столкнулся с проблемой что найти актуальную и понятную информацию по этому направлению довольно трудно
Подскажите, а здесь используется какой-нибудь паттерн? Или хотя бы часть из какого либо паттерна проектирования.
запиши видео про звук, и как его сохранять в Unity, реально ли перевести звук в строку и обратно?
Максим, я просмотрел все твои видео. Мне очень нравится твой контент. И только ты мне сможешь помочь в моей проблеме. У меня есть задача, в которой нужно использовать все время Instantiate. А как нам известно, это очень сильно много ест ресурсов. У меня есть массив из 10 Image. У них особенный порядок по возрастанию. Это числа, нарисованные в Фотошопе. Начиная от 0 и до 9. Алгоритм из числа строит эти числа в порядке числа. То есть, если был нанесен урон, 116, то мы берём индекс из массива 1, 1 и 6. И вот когда мы берём эти индексы. Происходит вызов Instantiate. Я попробовал закешировать эти числа. Но проблема в том, что когда показывается урон, у него есть таймер до исчезновения. И именно в этот момент, могут ударить ещё кто. И как тут быть? Пул не может включить другие объекты, ведь ещё не истекло время другого урона. До исчезновения. А кешировать ещё и растягивать пул - это все равно что просто использовать Instantiate. Прошу, Максим, помоги в этой задачи. Сразу пишу, что вариант использовать простой текст не подходит. И это не выходи и не как не решит условие задачи. Нужно именно работа с спрайтами или Image.
Можно менять спрайтам текстуру при доставании из пула. А с пулом вообще не вижу проблем.
И нет, растягивать пул не равнозначно созданию через Instantiate.
Пул растянется до определённого значения, как бы быстро не летели цифры. В перспективе это будет выгоднее.
Возможно тебе стоит изучить пулы подробнее.
У тебя там как дела? :(
У меня в порядке
Как же я долго оттягивал спросить этот вопрос у тимлида) Теперь уже не нужно.Всегда был уверен что таймскейл - не выход
Пауза как-то затянулась :(
я делаю по тупому: класс Config в нем статическое поле IsPaused и в коде где нужно проверяю если пауза, то прерываю выполнение или не считываю пользовательский ввод)) таймскейл безполезный, т.к. если на панели паузы будут анимации, например переливатся надпись Пауза то все заморозится))
есть возможность проигрывать анимации с нулевым таймскейлом. да и корутины с помощью WaitForSecondsRealtime не будут останавливаться
Это получается надо в каждом объекте, в каждом Update, FixedUpdate, LateUpdate, OnCollisionEnter и прочем надо прописать if(PauseManager.IsPaused){return;}. Способ так то хорош, если этих событий мало. Где же ты золотая середина
FixedUpdate не вызывается при timeScale 0, и не зависит от фреймрейта. Лучшее комбо для паузы, по-прежнему. Золото имхо
Старкрафт
По шейдерам. Будет ли видео о том, как переписать шейдер из 3D проекта, чтобы работал в URP ? Я постоянно с такой проблемой сталкиваюсь, а как сделать , материала нету ((
Если умеете колом писать шейдера, то в графе нет проблем вообще
Стало интересно, что такого можно наворотить с паузой. Казалось бы, создай state-машину, которая будет говорить кому надо "Стой собака" и делов то.
@@СветозарБоголюбов, физика не физичится сама по себе, её кто-нибудь куда-нибудь двигает, и ты говоришь ему "Не двигай". Со звуком тоже самое, ровно как и с музыкой. Ни что не работает сомо по себе, за всё кто-то отвечает.
Может быть это не применимо к каким-то большим проектам, но к тому с чем я работал подходило неплохо.
Будем обновлять пачку объектов руками?)
Типо того)
Последний видос 8 месяцев назад. Канал всё?
Судя по говору человек с украины, думаю ему сейчас не до нас.
Может погиб
@@JuggernautWare Дада щас бы программистами в окопах сидеть, нет дружок, таких там нет, все или с белыми билетами или учатся в вузах с отсрочками или живут сейчас за пределами Украины.
Круто получилось! Но так сразу и не понятно о чем видео, мне кажется Вам бы превью улучшить не помешало) Могу попробовать сделать, первую бесплатно, а потом по 300 рублей за работу. Я уже сотрудничаю с несколькими блогерами, жалоб нет. Все работы и заказы могу предоставить) Пишите в телеграмм или в вк, ссылки есть на канале.
Спасибо, что не удалил канал. Сподіваюся продовжиш його після Перемоги, але вже, звісно, українською мовою.