{"id":19704222,"url":"https://github.com/rimurudev/unity-scenepausesystem","last_synced_at":"2026-02-08T17:05:28.613Z","repository":{"id":257159079,"uuid":"857478174","full_name":"RimuruDev/Unity-ScenePauseSystem","owner":"RimuruDev","description":" Unity Scene Pause System предоставляет простой и эффективный способ управлять паузой и возобновлением игрового процесса в сценах Unity. Этот пакет позволяет разработчикам легко приостанавливать и возобновлять игру, управлять объектами, реагирующими на паузу, и обрабатывать различные сценарии паузы.","archived":false,"fork":false,"pushed_at":"2024-09-14T19:35:46.000Z","size":11,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-21T08:54:14.318Z","etag":null,"topics":["game-pause","pause","pause-management","pause-system","rimuru-dev","rimurudev","unity-pause","unity-pause-management","unity-pause-system","unity-pausesystem"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RimuruDev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-14T19:07:12.000Z","updated_at":"2024-09-17T15:23:05.000Z","dependencies_parsed_at":"2024-09-15T04:29:31.622Z","dependency_job_id":"8e47b890-e634-4f34-8eee-b59166f08f58","html_url":"https://github.com/RimuruDev/Unity-ScenePauseSystem","commit_stats":null,"previous_names":["rimurudev/unity-scenepausesystem"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/RimuruDev/Unity-ScenePauseSystem","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RimuruDev%2FUnity-ScenePauseSystem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RimuruDev%2FUnity-ScenePauseSystem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RimuruDev%2FUnity-ScenePauseSystem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RimuruDev%2FUnity-ScenePauseSystem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RimuruDev","download_url":"https://codeload.github.com/RimuruDev/Unity-ScenePauseSystem/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RimuruDev%2FUnity-ScenePauseSystem/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29237166,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T14:18:14.570Z","status":"ssl_error","status_checked_at":"2026-02-08T14:18:14.071Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["game-pause","pause","pause-management","pause-system","rimuru-dev","rimurudev","unity-pause","unity-pause-management","unity-pause-system","unity-pausesystem"],"created_at":"2024-11-11T21:21:12.116Z","updated_at":"2026-02-08T17:05:28.595Z","avatar_url":"https://github.com/RimuruDev.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Unity Scene Pause System\n\n**Автор:** RimuruDev  \n**Лицензия:** MIT\n\n## Описание\n\n**Unity Scene Pause System** предоставляет простой и эффективный способ управлять паузой и возобновлением игрового процесса в сценах Unity. Этот пакет позволяет разработчикам легко приостанавливать и возобновлять игру, управлять объектами, реагирующими на паузу, и обрабатывать различные сценарии паузы.\n\n## Ремарка\nЕсли вы используете `Time.timeScale = 0` для реализации паузы в игре, и считаете что это вам подходит лучше всего.  Тогда можете скипать это решение. Но если костыля в виде `Time.timeScale = 0` теперь не хватает, тогда добро пожаловать.\n\n## Возможности\n\n- **Легкая интеграция** в существующие проекты Unity.\n- **Гибкое управление паузой** с помощью интерфейсов и абстрактных классов.\n- **Поддержка пользовательских запросов паузы** через класс `PauseRequest`.\n- **Примеры использования** для быстрого старта.\n\n## Установка\n\n### Через Unity Package Manager (рекомендуется)\n\n1. **Добавьте ссылку на Git репозиторий** в Unity:\n\n    - Откройте ваш проект Unity.\n    - Перейдите в **Window \u003e Package Manager**.\n    - Нажмите на кнопку **+** в левом верхнем углу и выберите **Add package from git URL...**.\n    - Введите URL репозитория:\n\n      ```\n      https://github.com/RimuruDev/Unity-ScenePauseSystem.git\n      ```\n\n    - Нажмите **Add**, и пакет будет установлен в ваш проект.\n\n### Установка из локальной папки\n\n1. **Скачайте или склонируйте** репозиторий к себе на компьютер.\n2. В Unity перейдите в **Window \u003e Package Manager**.\n3. Нажмите на кнопку **+** и выберите **Add package from disk...**.\n4. Укажите путь к файлу `package.json` в корне скачанного репозитория.\n5. Пакет будет добавлен в ваш проект.\n\n## Использование\n\n### Шаг 1: Добавление PauseSystem на сцену\n\n1. **Создайте пустой GameObject** в вашей сцене.\n2. **Переименуйте** его в `PauseSystem` (по желанию для удобства).\n3. **Добавьте компонент** `PauseSystem` из пространства имен `AbyssMoth.ScenePauseSystem`.\n\n### Шаг 2: Создание паузируемых компонентов\n\n#### Вариант 1: Наследование от `PausableBehaviour`\n\nИспользуйте этот вариант, если ваш скрипт может наследоваться от `PausableBehaviour`.\n\n```csharp\nusing UnityEngine;\nusing AbyssMoth.ScenePauseSystem;\n\npublic class MyPausableComponent : PausableBehaviour\n{\n    private protected override void OnUpdate()\n    {\n        // Ваш код, который выполняется, когда игра не на паузе\n    }\n\n    private protected override void OnFixedUpdate()\n    {\n        // Ваш код для FixedUpdate, если необходимо\n    }\n\n    private protected override void OnLateUpdate()\n    {\n        // Ваш код для LateUpdate, если необходимо\n    }\n}\n```\n\n#### Вариант 2: Реализация интерфейса `IPausable`\n\nЕсли вы не можете наследоваться от `PausableBehaviour`, реализуйте интерфейс `IPausable`.\n\n```csharp\nusing UnityEngine;\nusing AbyssMoth.ScenePauseSystem;\n\npublic class MyPausableComponent : MonoBehaviour, IPausable\n{\n    public bool IsPaused { get; private set; }\n\n    private void Update()\n    {\n        if (IsPaused)\n            return;\n\n        // Ваш код\n    }\n\n    public void Pause(in PauseRequest request, Object sender = null)\n    {\n        IsPaused = true;\n        // Дополнительная логика при паузе\n    }\n\n    public void Resume(in PauseRequest request, Object sender = null)\n    {\n        IsPaused = false;\n        // Дополнительная логика при возобновлении\n    }\n}\n```\n\n### Шаг 3: Управление паузой\n\nДля управления паузой используйте методы `PauseGame` и `ResumeGame` компонента `PauseSystem`.\n\n```csharp\nusing UnityEngine;\nusing AbyssMoth.ScenePauseSystem;\n\npublic class PauseController : MonoBehaviour\n{\n    [SerializeField] private PauseSystem pauseSystem;\n\n    private void Update()\n    {\n        if (Input.GetKeyDown(KeyCode.P))\n        {\n            if (pauseSystem.IsPaused)\n            {\n                // Возобновляем игру\n                pauseSystem.ResumeGame(new PauseRequest { IsPerformSettings = true }, this);\n            }\n            else\n            {\n                // Ставим игру на паузу\n                pauseSystem.PauseGame(new PauseRequest { IsPerformSettings = true }, this);\n            }\n        }\n    }\n}\n```\n\n### Использование `PauseRequest`\n\nКласс `PauseRequest` позволяет передавать дополнительную информацию о причине паузы или возобновления.\n\nПример постановки игры на паузу при победе:\n\n```csharp\npublic void OnPlayerVictory()\n{\n    var request = new PauseRequest { IsVictory = true };\n    pauseSystem.PauseGame(request, this);\n}\n```\n\nВ вашем паузируемом компоненте вы можете обработать этот запрос:\n\n```csharp\npublic class VictoryHandler : PausableBehaviour\n{\n    public override void Pause(in PauseRequest request, Object sender = null)\n    {\n        base.Pause(request, sender);\n\n        if (request.IsVictory)\n        {\n            // Логика при победе (например, показать экран победы)\n        }\n    }\n}\n```\n\n## Примеры\n\n### InfinityDebugLogWriter\n\nПример компонента, который пишет сообщения в консоль, когда игра не на паузе.\n\n```csharp\nusing UnityEngine;\nusing AbyssMoth.ScenePauseSystem;\n\npublic class InfinityDebugLogWriter : PausableBehaviour\n{\n    private protected override void OnUpdate()\n    {\n        Debug.Log($\"Сообщение от {nameof(InfinityDebugLogWriter)}\");\n    }\n}\n```\n\n### InfinityColorDebugLogWriter\n\nПример реализации `IPausable` без наследования от `PausableBehaviour`.\n\n```csharp\nusing UnityEngine;\nusing AbyssMoth.ScenePauseSystem;\n\npublic class InfinityColorDebugLogWriter : MonoBehaviour, IPausable\n{\n    public bool IsPaused { get; private set; }\n\n    private void Update()\n    {\n        if (IsPaused)\n            return;\n\n        Debug.Log(\"\u003ccolor=yellow\u003eЦветное сообщение!\u003c/color\u003e\");\n    }\n\n    public void Pause(in PauseRequest request, Object sender = null)\n    {\n        IsPaused = true;\n        // Дополнительная логика при паузе\n    }\n\n    public void Resume(in PauseRequest request, Object sender = null)\n    {\n        IsPaused = false;\n        // Дополнительная логика при возобновлении\n    }\n}\n```\n\n## Дополнительная информация\n\n### Поля `PauseRequest`\n\n`PauseRequest` содержит следующие поля, которые вы можете использовать для передачи дополнительной информации:\n\n- **IsPerformSettings**: пауза вызвана открытием настроек.\n- **IsVictory**: пауза вызвана победой игрока.\n- **IsDefeat**: пауза вызвана поражением игрока.\n- **IsShowAd**: пауза для показа рекламы.\n- **IsEndSceneLifeCycle**: пауза из-за окончания жизненного цикла сцены.\n- **IsChangedApplicationFocus**: изменение фокуса приложения.\n- **IsChangedOnApplicationPause**: приложение поставлено на паузу (например, свернуто).\n\n### События паузы и возобновления\n\nВы можете переопределить методы `Pause` и `Resume` в ваших компонентах для выполнения дополнительной логики при паузе или возобновлении.\n\n```csharp\npublic class CustomPausableComponent : PausableBehaviour\n{\n    public override void Pause(in PauseRequest request, Object sender = null)\n    {\n        base.Pause(request, sender);\n        // Ваша дополнительная логика при паузе\n    }\n\n    public override void Resume(in PauseRequest request, Object sender = null)\n    {\n        base.Resume(request, sender);\n        // Ваша дополнительная логика при возобновлении\n    }\n}\n```\n\n## Содействие\n\nМы приветствуем вклад сообщества! Если вы хотите помочь развитию проекта:\n\n- **Сообщайте об ошибках**: создавайте [Issues](https://github.com/RimuruDev/Unity-ScenePauseSystem/issues) на GitHub.\n- **Вносите изменения**: делайте форки и отправляйте пул-реквесты.\n- **Предлагайте улучшения**: делитесь идеями и предложениями.\n\n## Лицензия\n\nЭтот проект лицензирован под лицензией MIT. Подробности смотрите в файле [LICENSE](LICENSE).\n\n## Контакты\n\n- **Автор:** RimuruDev\n- **Email:** rimuru.dev@gmail.com\n- **GitHub:** [github.com/RimuruDev](https://github.com/RimuruDev)\n\n## Благодарности\n\nСпасибо за использование **Unity Scene Pause System**! Мы надеемся, что этот пакет облегчит разработку вашего проекта. Если у вас есть вопросы или нужна помощь, не стесняйтесь обращаться.\n\n---\n\n---\n\n---\n\n### TODO:\n- Добавить нормальную XML документацию к коду.\n- Добавить примеры для инъекций PauseSystem к IPauseSystem в локальном контексте сцены.\n- Добавить расширение редактора для аркестрации PauseSystem\n- Добавить удобное расширения для быстрого получения доступа к IPauseSystem для случая когда на проекте не используется DI, но при этом без DontDestroyOnLoad и проблем синглтонов. Реализовать через смесь MonoSingleton + паттерн NullObject.\n- Добавить запекание (кэширование) для PauseSystem.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frimurudev%2Funity-scenepausesystem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frimurudev%2Funity-scenepausesystem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frimurudev%2Funity-scenepausesystem/lists"}