{"id":15292677,"url":"https://github.com/kaitoartz/dropdownspeakermode","last_synced_at":"2025-03-29T20:27:26.287Z","repository":{"id":264828613,"uuid":"857977236","full_name":"kaitoartz/DropdownSpeakerMode","owner":"kaitoartz","description":"Una herramienta eficiente y fácil de integrar para seleccionar y gestionar modos de altavoz en proyectos Unity, compatible con múltiples plataformas.","archived":false,"fork":false,"pushed_at":"2024-09-16T07:26:23.000Z","size":21697,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-04T21:23:52.567Z","etag":null,"topics":["canvas","csharp","speaker-manager","ui","unity"],"latest_commit_sha":null,"homepage":"","language":null,"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/kaitoartz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-16T04:28:31.000Z","updated_at":"2024-11-18T23:38:04.000Z","dependencies_parsed_at":"2024-11-26T12:48:52.018Z","dependency_job_id":null,"html_url":"https://github.com/kaitoartz/DropdownSpeakerMode","commit_stats":null,"previous_names":["kaitoartz/dropdownspeakermode"],"tags_count":0,"template":true,"template_full_name":"kaitoartz/DropdownResolution","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaitoartz%2FDropdownSpeakerMode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaitoartz%2FDropdownSpeakerMode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaitoartz%2FDropdownSpeakerMode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaitoartz%2FDropdownSpeakerMode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kaitoartz","download_url":"https://codeload.github.com/kaitoartz/DropdownSpeakerMode/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246240367,"owners_count":20745861,"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":["canvas","csharp","speaker-manager","ui","unity"],"created_at":"2024-09-30T16:25:40.458Z","updated_at":"2025-03-29T20:27:26.264Z","avatar_url":"https://github.com/kaitoartz.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# 🔊 Unity Speaker Mode Selector\n\n[![Unity Version](https://img.shields.io/badge/Unity-2021.3.15f1%2B-blue.svg)](https://unity3d.com/get-unity/download)\n[![UnityPackage](https://img.shields.io/badge/Package-SpeakerModeTool%2B-blue.svg)](https://github.com/KaitoOwO/DropdownSpeakerMode/blob/main/SpeakerModeTool.unitypackage\n)\n[![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE.md)\n[![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS%20%7C%20Linux%20%7C%20Xbox%20%7C%20PlayStation-lightgrey)](#)\n[![Contributions](https://img.shields.io/badge/Contributions-Welcome-orange.svg)](CONTRIBUTING.md)\n[![Twitter Follow](https://img.shields.io/twitter/follow/kaitoartzz?style=social)](https://x.com/kaitoartzz)\n\n\u003e Una herramienta eficiente y fácil de integrar para seleccionar y gestionar modos de altavoz en proyectos Unity, compatible con múltiples plataformas.\n\n---\n✨🌷 ¡Hola, pequeños devs!💖 Soy **KaitoArtz**, y estoy emocionado de compartir este proyecto contigo.\n\nEsta guía te proporcionará instrucciones detalladas para integrar, personalizar y modificar la herramienta de selección de modo de speaker en un proyecto de Unity. Este package fue desarrollado en Unity **2021.3.15f1** y contiene varias escenas preconfiguradas, scripts y assets necesarios para su funcionamiento.\n\nGUÍA DE USO / DOCS:\n\n[![GoogleDocs](https://img.shields.io/badge/Guide-GoogleDocs-blue?style=for-the-badge)](https://docs.google.com/document/d/1fNBMMr-iCRFTAYUThmCsrDRbVIwLbtT8DEUj7X-9amA/edit?usp=sharing)\n\n\n\n![Speaker Mode Selector Demo](.image/speakerdemo.gif)\n\n---\n\n## 📖 Tabla de Contenidos\n\n- [✨ Características](#-características)\n- [🔧 Requisitos Previos](#-requisitos-previos)\n- [📦 Instalación](#-instalación)\n- [⚙️ Configuración](#️-configuración)\n- [🚀 Uso](#-uso)\n- [🎮 Pruebas](#-pruebas)\n- [📚 Documentación Detallada](#-documentación-detallada)\n- [🤝 Contribuciones](#-contribuciones)\n- [📄 Licencia](#-licencia)\n- [📞 Soporte](#-soporte)\n\n---\n\n## ✨ Características\n\n- **Compatibilidad Multiplataforma**: Funciona en Windows, macOS, Linux, Xbox y Playstation.\n- **Selección Dinámica**: Permite cambiar entre diferentes modos de altavoz en tiempo real.\n- **Interfaz de Usuario Intuitiva**: Utiliza un dropdown para una selección fácil y rápida.\n- **Persistencia de Configuración**: Guarda y carga automáticamente la última configuración de audio seleccionada.\n- **Transiciones Suaves**: Implementa cambios de modo de altavoz con transiciones graduales para una mejor experiencia de usuario.\n- **Fácil Integración**: Diseñado para ser incorporado rápidamente en proyectos Unity existentes.\n  \n\u003e [!TIP]\n\u003e **¿Sabías que...?** Esta herramienta también puede adaptarse para agregar mas modos de parlante.\n\n---\n## 🛠 Requisitos Previos\n\n- Unity versión 2021.3.15f1 o superior.\n- Conocimientos básicos de Unity y C#.\n- Familiaridad con el sistema de audio de Unity y AudioMixer.\n- Manejo de Canvas de Unity.\n---\n\n## 📦 Instalación\n\n### Requisitos Previos\n\n- **Unity** versión **2021.3.15f1** o superior.\n- Conocimiento básico de la interfaz de Unity y manejo de scripts.\n- Package: [![UnityPackage](https://img.shields.io/badge/Package-SpeakerModeTool%2B-blue.svg)](https://github.com/KaitoOwO/DropdownSpeakerMode/blob/main/SpeakerModeTool.unitypackage\n)\n\n### Pasos de Instalación\n\n1. **Importar el Package**\n   - Abre tu proyecto Unity (2021.3.15f1 o superior).\n   - Ve a `Assets \u003e Import Package \u003e Custom Package`.\n   - Selecciona el package de la herramienta de selección de speaker descargado.\n   - Contenido:\n\n     ![image](https://github.com/user-attachments/assets/aaeb0bef-5f65-4500-a1ec-c7123c8e53e1)\n\n2. **Configuración de Escenas**\n   - Abre `File \u003e Build Settings`.\n   - Asegúrate de que la escena \"LoadInitialization\" sea la primera en la lista.\n   - Ordena las demás escenas según las necesidades de tu proyecto.\n     \n     ![image](https://github.com/user-attachments/assets/413fd8c2-6918-469c-9115-5365267538b8)\n\n3. **Verificación de Componentes**\n   - Revisa que los siguientes scripts estén presentes en tu proyecto:\n     - `AudioInitializer`\n     - `AudioSettingsManager`\n     - `AudioSettingsDropdown`\n     - `SceneManager`\n     - `ChangeSceneTimer`\n       \n    ![image](https://github.com/user-attachments/assets/51471009-4ca3-42bd-acbb-e73dc2ac5e19)\n\n\n\n\u003e [!NOTE]\n\u003e Puedes testear y probar las escenas para ver en tiempo real como funcionan los scripts y sus funcionalidades.\n\n---\n\n## ⚙️ Configuración\n\n### AudioSettingsManager\n\nEste componente gestiona los modos de altavoz disponibles y las transiciones entre ellos.\n\n```csharp\npublic class AudioSettingsManager : MonoBehaviour\n{\n    public static AudioSettingsManager Instance { get; private set; }\n    \n    [SerializeField] private AudioMixer audioMixer;\n\n    public AudioSpeakerMode[] speakerModes = {\n        AudioSpeakerMode.Mono,\n        AudioSpeakerMode.Stereo,\n        AudioSpeakerMode.Quad,\n        AudioSpeakerMode.Mode5point1,\n    };\n\n    // ... (resto del código)\n}\n```\n\n### AudioSettingsDropdown\n\nManeja la interfaz de usuario para la selección de modos de altavoz.\n\n```csharp\npublic class AudioSettingsDropdown : MonoBehaviour\n{\n    [SerializeField] private TMP_Dropdown speakerModeDropdown;\n    [SerializeField] private GameObject warningPanel;\n    [SerializeField] private Button applyButton;\n    [SerializeField] private Button cancelButton;\n\n    // ... (resto del código)\n}\n```\n\n\u003e [!WARNING]\n\u003e Asegúrate de estar utilizando la version actualizada del `TextMeshPro` de Unity.\n\n### Configuración del Inspector\n\n- **Dropdown**: Asigna el prefab `SpeakerDropdown` al script `AudioSettingsDropdown`.\n- **Warning Panel**: Asigna el prefab `WarningPanel` que se mostrará cuando se detecten cambios en las pantallas.\n- **Continue Button**: `Botón` para confirmar y aplicar cambios tras detectar un nuevo cambio de parlante.\n- **Cancel Button**: `Botón` para cancelar y no aplicar los cambios.\n\n---\n\n## 🚀 Uso\n\n1. **Inicialización**\n   - La escena \"LoadInitialization\" se carga primero, inicializando la configuración de audio.\n   - Después de un breve retraso, se carga la escena principal.\n\n2. **Selección de Modo de Altavoz**\n   - En la escena principal, utiliza el dropdown para seleccionar el modo de altavoz deseado.\n   - Los cambios se aplican inmediatamente con una transición suave.\n\n3. **Manejo de Advertencias**\n   - Si se requiere un reinicio para aplicar los cambios, se mostrará un panel de advertencia.\n   - Utiliza los botones \"Apply\" o \"Cancel\" según sea necesario.\n\n4. **Navegación entre Escenas**\n   - Utiliza el `SceneManager` para moverte entre diferentes escenas manteniendo la configuración de audio.\n\n\u003e [!TIP]\n\u003e Para manejar el buffer de audio de manera óptima cuando se cambian modos de speaker, puedes modificar el `AudioSettingsManager` para pausar y reanudar el audio de forma más controlada, evitando problemas de corte abrupto.\n\n---\n\n## 🎮 Pruebas\n\n### **Cambio de speaker en tiempo real**\n\n### **MainScene:**\n\nUna vez que estemos en game. Cargará la escena **LoadInitialization** y pasará a **MainScene**. \n\n![image](https://github.com/user-attachments/assets/352a190b-5cb0-45fa-b401-8826eb4dc243)\n\nSi cambiamos el tipo de speaker, aparecerá el panel de advertencia.\n\n#### **Panel de Advertencia:**\n\n![image](https://github.com/user-attachments/assets/666c83fe-784c-4050-ad71-c6844445b3ce)\n\nSi le damos a **Aplicar**, se pausara el audio, pero luego volverá a reanudar normalmente (Esto es como feedback de que el cambio se realizó correctamente) y se vera asi el **AudioMixer**:\n\n#### **Cambios en AudioMixer:**\n\n![image](https://github.com/user-attachments/assets/0b778078-887c-4c2a-aef0-d5116761c3e6)\n![image](https://github.com/user-attachments/assets/c203bc46-dbb4-4a14-8388-0c610536a1a7)\n\n### **Comprobar cambios:**\n\nUna vez que queramos cambiar de escena, nos fijamos que el **AudioMixer** sigue con el mismo valor aplicado.\n\n### **Escena de nivel:**\n\n![image](https://github.com/user-attachments/assets/f503095c-22cb-48fa-ac66-960fc29a8df8)\n\nVemos que la escena de Nivel, es como cuando le damos Jugar a nuestro videojuego. Como ven, el audiomixer sigue con el mismo tipo de parlante.\n\n### **Escena de pausa:**\n\nAhora como también estuvieramos testeando nuestro videojuego. Si vamos a la escena de pausa o vamos a una escena que también contenga un panel de opciones con el **Dropdown** de cambiar el parlante (**Speaker**), también guardará los valores que teníamos en la escena principal.\n\n![image](https://github.com/user-attachments/assets/069aa923-547c-4ca4-b426-11779f9f767c)\n\n### **Cerrar y volver a abrir el juego:**\n\nSi cerramos nuestro videojuego, y luego lo volviéramos a abrir, nuestra escena de **LoadInitialization**, hará todo el trabajo para cargar los datos del playerprefb que guardamos con el valor del tipo de parlante.\n\n![image](https://github.com/user-attachments/assets/d17d5ad6-e2e2-444d-aeb7-f2a77001764f)\n\nEsperamos un momento y…\n\n![image](https://github.com/user-attachments/assets/1f625439-d55b-4a59-9222-6ee405cbb607)\n\n---\n\n## 📚 Documentación Detallada\n\n### Adaptación a Otros Proyectos\n\n#### Modificar Modos de Altavoz Disponibles\n\nEn `AudioSettingsManager`, ajusta el array `speakerModes`:\n\n```csharp\npublic AudioSpeakerMode[] speakerModes = {\n    AudioSpeakerMode.Mono,\n    AudioSpeakerMode.Stereo,\n    AudioSpeakerMode.Quad,\n    AudioSpeakerMode.Mode5point1,\n    AudioSpeakerMode.Mode7point1 // Añadir si es necesario\n};\n```\n\n#### Personalizar la Interfaz de Usuario\n\nEn `AudioSettingsDropdown`, modifica `GetDisplayNameForSpeakerMode`:\n\n```csharp\nprivate string GetDisplayNameForSpeakerMode(AudioSpeakerMode mode)\n{\n    switch (mode)\n    {\n        case AudioSpeakerMode.Stereo: return \"Estéreo\";\n        case AudioSpeakerMode.Quad: return \"Cuadrafónico\";\n        case AudioSpeakerMode.Mode5point1: return \"Surround 5.1\";\n        // Añadir más casos según sea necesario\n        default: return mode.ToString();\n    }\n}\n```\n\n#### Ajustar el SceneManager\n\nPersonaliza el `SceneManager` para manejar la navegación entre escenas según tu estructura de proyecto:\n\n```csharp\npublic class SceneManager : MonoBehaviour\n{\n    [SerializeField] public string mainSceneName = \"MainScene\";\n    [SerializeField] public string[] levelNames;\n\n    public void LoadNextLevel(int currentLevel)\n    {\n        if (currentLevel \u003c levelNames.Length - 1)\n        {\n            UnityEngine.SceneManagement.SceneManager.LoadScene(levelNames[currentLevel + 1]);\n        }\n        else\n        {\n            Debug.Log(\"No hay más niveles disponibles\");\n        }\n    }\n\n    // Añadir más métodos según sea necesario\n}\n```\n\n\u003e [!NOTE]\n\u003e Consulta el código fuente completo para más detalles y comentarios que te ayudarán a entender y modificar el comportamiento según tus necesidades.\n\n## 🤝 Contribuciones\n\n¡Las contribuciones son bienvenidas! Si deseas mejorar este proyecto, sigue estos pasos:\n\n1. Haz un Fork del repositorio.\n2. Crea una rama nueva: `git checkout -b feature/nueva-funcionalidad`.\n3. Realiza tus cambios y haz commit: `git commit -m 'Agrega nueva funcionalidad'`.\n4. Haz push a la rama: `git push origin feature/nueva-funcionalidad`.\n5. Abre un Pull Request.\n\n\u003e [!TIP]\n\u003e Asegúrate de seguir las convenciones de codificación y agregar comentarios claros para facilitar la revisión.\n\n---\n\n## 📄 Licencia\n\nEste proyecto está licenciado bajo la licencia MIT. Esto significa que eres libre de usar, modificar y distribuir este software de acuerdo con los términos de la licencia.\nConsulta el archivo [Licencia](LICENSE.md) para más detalles.\n\n---\n\n## 🔰 Políticas de Privacidad\n\nEste proyecto no recopila información personal ni técnica de los usuarios. Para más detalles, consulta nuestras [Políticas de Privacidad](SECURITY.md).\n\n---\n\n## 🔗 Enlaces de Interés\n\n- **Portfolio Personal**: [![Twitter Follow](https://img.shields.io/twitter/follow/kaitoartzz?style=social)](https://x.com/kaitoartzz)\n- **Itch.io / Videojuegos Publicados**: [![Itch.io](https://img.shields.io/badge/KaitoArtz-%23FF0B34.svg?logo=Itch.io\u0026logoColor=white)](https://kaitoartz.itch.io)\n- **Otros Proyectos en Unity**: [![GitHub](https://img.shields.io/badge/KaitoArtz-%23121011.svg?logo=github\u0026logoColor=white)](https://github.com/KaitoOwO)\n\n---\n\n## 📞 Soporte\n\nSi tienes preguntas, problemas o sugerencias, no dudes en contactarme:\n\n- **Email**: kaitoartz.info@gmail.com\n- **Twitter**: [@kaitoartzz](https://twitter.com/K41t0M)\n- **Discord**: kaitoowo\n\n\n\nEspero que les guste esta herramienta que la cree y programe para un proyecto universitario. La estuve puliendo y trabajando para que se pudiera integrar fácil en cualquier proyecto y para compartirlo con ustedes! Si gustan, dejen una estrella, comenten, o si encuentran alguna idea para mejorar, no olviden dejar su [![GitHub Pages](https://img.shields.io/badge/%20Issues-121013?logo=github\u0026logoColor=white)](https://github.com/KaitoOwO/DropdownResolution/issues) y con gusto mejoraremos juntos esta herramienta. ✨❤️\n\n---\nDesarrollado con ❤️ por *KaitoArtz*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkaitoartz%2Fdropdownspeakermode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkaitoartz%2Fdropdownspeakermode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkaitoartz%2Fdropdownspeakermode/lists"}