{"id":24669039,"url":"https://github.com/louiixx-h/smart-scene-unity-library","last_synced_at":"2026-03-03T17:06:21.302Z","repository":{"id":246780747,"uuid":"822161647","full_name":"Louiixx-h/smart-scene-unity-library","owner":"Louiixx-h","description":"A library to help you manage your scenes in Unity","archived":false,"fork":false,"pushed_at":"2025-03-19T22:22:58.000Z","size":56,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-19T23:22:30.520Z","etag":null,"topics":["library","scenemanagment","unity","unity-library","unity-pl","unity2d","unity3d"],"latest_commit_sha":null,"homepage":"http://luislabs.com","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/Louiixx-h.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-06-30T12:58:15.000Z","updated_at":"2025-03-19T22:23:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"ee14b853-2906-47b1-b827-5273bb13fc99","html_url":"https://github.com/Louiixx-h/smart-scene-unity-library","commit_stats":null,"previous_names":["louiixx-h/smart-scene-unity"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Louiixx-h%2Fsmart-scene-unity-library","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Louiixx-h%2Fsmart-scene-unity-library/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Louiixx-h%2Fsmart-scene-unity-library/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Louiixx-h%2Fsmart-scene-unity-library/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Louiixx-h","download_url":"https://codeload.github.com/Louiixx-h/smart-scene-unity-library/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244804816,"owners_count":20513182,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["library","scenemanagment","unity","unity-library","unity-pl","unity2d","unity3d"],"created_at":"2025-01-26T09:19:06.252Z","updated_at":"2026-03-03T17:06:16.256Z","avatar_url":"https://github.com/Louiixx-h.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SmartScene - Gerenciamento de Cenas na Unity\n\nA **SmartScene** é uma biblioteca para Unity que facilita o gerenciamento de cenas, permitindo agrupar cenas em \"Scene Groups\" e carregá-las de forma assíncrona. Ela é ideal para projetos que exigem carregamento dinâmico de cenas, como jogos com múltiplas fases, interfaces de usuário complexas ou sistemas de carregamento progressivo.\n\n---\n\n## Instalação\n\n### Passo a Passo para Instalar via Package Manager\n\n1. Abra o Unity e navegue até o **Package Manager**:\n  - No menu superior, clique em `Window \u003e Package Manager`.\n\n2. No Package Manager, clique no botão **\"+\"** no canto superior esquerdo e selecione **\"Add package from git URL...\"**.\n\n3. Insira o seguinte Git URL:\n   ```\n   https://github.com/Louiixx-h/smart-scene-unity-library.git\n   ```\n\n4. Clique em **\"Add\"**. O Unity baixará e importará automaticamente a biblioteca **SmartScene** para o seu projeto.\n\n5. Aguarde o processo de importação ser concluído. A biblioteca estará pronta para uso!\n\n---\n\n## Como Usar\n\n### 1. Criando um Scene Group\n\nUm `Scene Group` é uma lista de cenas que podem ser carregadas juntas. Para criar um, use o `SceneGroupDataSo` (ScriptableObject).\n\n#### Passos:\n\n1. No Unity, clique com o botão direito no **Project Window** e selecione `Create \u003e SmartScene \u003e SceneGroupDataSo`.\n2. Nomeie o arquivo (por exemplo, `InitialSceneGroup`).\n3. No Inspector, defina o nome do grupo e a lista de cenas.\n\n---\n\n### 2. Usando `SceneGroupDataSO` no `SceneConfig`\n\nPara usar os dados de um `SceneGroupDataSO` no `SceneConfig`, você pode acessar o método `GetData()` do `SceneGroupDataSO`. Aqui está um exemplo:\n\n```csharp\n// Suponha que você tenha uma referência ao SceneGroupDataSO\n[SerializeField] private SceneGroupDataSo sceneGroupDataSo;\n\n// Crie um SceneConfig usando o SceneGroupDataSO\nvar sceneConfig = new SceneConfig.SceneConfigBuilder()\n    .SetSceneGroup(sceneGroupDataSo.GetData()) // Obtém os dados do SceneGroupDataSO\n    .SetProgress(new Progress\u003cfloat\u003e(progress =\u003e Debug.Log($\"Progress: {progress * 100}%\")))\n    .SetIgnoreIfAlreadyLoaded(true)\n    .Build();\n```\n\n#### Explicação:\n\n- **`sceneGroupDataSo.GetData()`**: Retorna o `SceneGroupData` (struct) armazenado no `SceneGroupDataSO`.\n- **`SetSceneGroup`**: Define o grupo de cenas a ser carregado.\n- **`SetProgress`**: Define um objeto para reportar o progresso do carregamento.\n- **`SetIgnoreIfAlreadyLoaded`**: Ignora cenas já carregadas, se necessário.\n\n---\n\n### 3. Configurando o `GameManager`\n\nO `GameManager` é responsável por iniciar o carregamento das cenas e gerenciar os eventos de carregamento. Aqui está um exemplo de implementação:\n\n```csharp\nusing Com.LuisLabs.SmartScene;\nusing UnityEngine;\n\npublic class GameManager : PersistentSingleton\u003cGameManager\u003e\n{\n    [SerializeField] private SceneGroupDataSo initialSceneGroupData; // Referência ao ScriptableObject no Inspector\n    \n    private ISmartSceneManagement _smartSceneManagement;\n\n    protected override void Awake()\n    {\n        base.Awake();\n        _smartSceneManagement = GetComponent\u003cSmartSceneManagement\u003e(); // Obtém o gerenciador de cenas\n    }\n\n    private void Start()\n    {\n        // Carrega o grupo de cenas inicial\n        SwitchSceneGroup(initialSceneGroupData);\n    }\n\n    private void OnEnable()\n    {\n        // Inscreve-se nos eventos de carregamento\n        _smartSceneManagement.OnLoadingStart += OnLoadingStart;\n        _smartSceneManagement.OnLoadingEnd += OnLoadingEnd;\n    }\n    \n    private void OnDisable()\n    {\n        // Remove a inscrição nos eventos de carregamento\n        _smartSceneManagement.OnLoadingStart -= OnLoadingStart;\n        _smartSceneManagement.OnLoadingEnd -= OnLoadingEnd;\n    }\n\n    /// \u003csummary\u003e\n    /// Troca para um novo grupo de cenas.\n    /// \u003c/summary\u003e\n    /// \u003cparam name=\"sceneGroupData\"\u003eO ScriptableObject contendo o grupo de cenas.\u003c/param\u003e\n    public void SwitchSceneGroup(SceneGroupDataSo sceneGroupData)\n    {\n        var sceneConfig = new SceneConfig.SceneConfigBuilder()\n            .SetSceneGroup(sceneGroupData.GetData()) // Obtém os dados do grupo de cenas\n            .Build();\n\n        // Inicia o carregamento assíncrono\n        StartCoroutine(_smartSceneManagement.SwitchSceneGroupAsync(sceneConfig));\n    }\n    \n    private void OnLoadingStart()\n    {\n        Debug.Log(\"Loading started\"); // Log quando o carregamento começa\n    }\n    \n    private void OnLoadingEnd()\n    {\n        Debug.Log(\"Loading ended\"); // Log quando o carregamento termina\n    }\n}\n```\n\n#### Explicação:\n\n- **PersistentSingleton**: Garante que o `GameManager` persista entre cenas e tenha apenas uma instância.\n- **SceneGroupDataSo**: Referência ao ScriptableObject que contém o grupo de cenas inicial.\n- **SwitchSceneGroup**: Método para trocar o grupo de cenas ativo.\n- **Eventos de Carregamento**: `OnLoadingStart` e `OnLoadingEnd` são usados para notificar o início e o fim do carregamento.\n\n---\n\n### 4. Configurando o `SmartSceneManagement`\n\nAdicione o componente `SmartSceneManagement` ao mesmo GameObject que contém o `GameManager`. Isso permitirá que o `GameManager` acesse e controle o carregamento de cenas.\n\n---\n\n### 5. Criando e Configurando o `SceneGroupDataSo`\n\n1. Crie um `SceneGroupDataSo` no Unity (como explicado na seção 3).\n2. Defina as cenas que devem ser carregadas no grupo (por exemplo, `MainMenu`, `UI`, `Logic`).\n3. Arraste o `SceneGroupDataSo` criado para o campo `initialSceneGroupData` no Inspector do `GameManager`.\n\n---\n\n### 6. Executando o Projeto\n\nAo iniciar o jogo, o `GameManager` carregará automaticamente o grupo de cenas definido em `initialSceneGroupData`. Você verá logs no console indicando o início e o fim do carregamento.\n\n---\n\nExemplos e Tutoriais\nPara um exemplo completo de como usar a biblioteca SmartScene, confira o repositório de Sample:\n\n🔗 Smart Scene Unity Library Sample\n\nO repositório de Sample contém um projeto Unity funcional que demonstra como configurar e usar a biblioteca em um cenário real. Siga as instruções no README.md do repositório para começar.\n\n---\n\n## Documentação da API\n\n### `SmartSceneManagement`\n\n- **Propriedades**:\n  - `CurrentSceneGroup`: Grupo de cenas atualmente carregadas.\n  - `CurrentPersistentSceneGroup`: Grupo de cenas persistentes carregadas.\n  - `ActiveScene`: Cena ativa no momento.\n  - `SceneCount`: Número de cenas carregadas.\n  - `OnLoadingStart`: Evento disparado ao iniciar o carregamento.\n  - `OnLoadingEnd`: Evento disparado ao finalizar o carregamento.\n\n- **Métodos**:\n  - `SwitchSceneGroupAsync(SceneConfig)`: Troca para um novo grupo de cenas.\n  - `LoadSceneToCurrentGroupAsync(SceneConfig)`: Adiciona cenas ao grupo atual.\n  - `LoadPersistentSceneAsync(SceneConfig)`: Carrega cenas persistentes.\n  - `UnloadSceneAsync(string)`: Descarrega uma cena do grupo atual.\n  - `UnloadPersistentSceneAsync(string)`: Descarrega uma cena persistente.\n  - `GetSceneAt(int)`: Retorna a cena no índice especificado.\n\n### `SceneConfig`\n\n- **Propriedades**:\n  - `Progress`: Objeto para reportar o progresso do carregamento.\n  - `SceneGroup`: Grupo de cenas a serem carregadas.\n  - `IgnoreIfAlreadyLoaded`: Ignora cenas já carregadas.\n\n- **Builder**:\n  - `SetSceneGroup(SceneGroupData)`: Define o grupo de cenas.\n  - `SetProgress(IProgress\u003cfloat\u003e)`: Define o objeto de progresso.\n  - `SetIgnoreIfAlreadyLoaded(bool)`: Define se cenas já carregadas devem ser ignoradas.\n  - `Build()`: Constrói o objeto `SceneConfig`.\n\n### `SceneGroupDataSo`\n\n- **Métodos**:\n  - `GetData()`: Retorna o `SceneGroupData` armazenado no ScriptableObject.\n\n---\n\n## Exemplo Completo\n\nAqui está um exemplo completo de como usar a biblioteca com o `GameManager`:\n\n1. Crie um `SceneGroupDataSo` chamado `InitialSceneGroup` e defina as cenas `MainMenu`, `UI` e `Logic`.\n2. Adicione o `GameManager` e o `SmartSceneManagement` a um GameObject na cena.\n3. Arraste o `InitialSceneGroup` para o campo `initialSceneGroupData` no Inspector do `GameManager`.\n4. Execute o projeto. O grupo de cenas será carregado automaticamente, e você verá logs no console indicando o progresso.\n\n---\n\n## Contribuindo\n\nSe você quiser contribuir para o projeto, sinta-se à vontade para abrir uma **issue** ou enviar um **pull request**. Todas as contribuições são bem-vindas!\n\n---\n\n## Licença\n\nEste projeto está licenciado sob a licença MIT. Consulte o arquivo [LICENSE](LICENSE) para mais detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flouiixx-h%2Fsmart-scene-unity-library","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flouiixx-h%2Fsmart-scene-unity-library","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flouiixx-h%2Fsmart-scene-unity-library/lists"}