Una herramienta eficiente y fácil de integrar para seleccionar y gestionar modos de altavoz en proyectos Unity, compatible con múltiples plataformas.
✨🌷 ¡Hola, pequeños devs!💖 Soy KaitoArtz, y estoy emocionado de compartir este proyecto contigo.
Esta 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.
GUÍA DE USO / DOCS:
- ✨ Características
- 🔧 Requisitos Previos
- 📦 Instalación
- ⚙️ Configuración
- 🚀 Uso
- 🎮 Pruebas
- 📚 Documentación Detallada
- 🤝 Contribuciones
- 📄 Licencia
- 📞 Soporte
- Compatibilidad Multiplataforma: Funciona en Windows, macOS, Linux, Xbox y Playstation.
- Selección Dinámica: Permite cambiar entre diferentes modos de altavoz en tiempo real.
- Interfaz de Usuario Intuitiva: Utiliza un dropdown para una selección fácil y rápida.
- Persistencia de Configuración: Guarda y carga automáticamente la última configuración de audio seleccionada.
- Transiciones Suaves: Implementa cambios de modo de altavoz con transiciones graduales para una mejor experiencia de usuario.
- Fácil Integración: Diseñado para ser incorporado rápidamente en proyectos Unity existentes.
Tip
¿Sabías que...? Esta herramienta también puede adaptarse para agregar mas modos de parlante.
- Unity versión 2021.3.15f1 o superior.
- Conocimientos básicos de Unity y C#.
- Familiaridad con el sistema de audio de Unity y AudioMixer.
- Manejo de Canvas de Unity.
- Unity versión 2021.3.15f1 o superior.
- Conocimiento básico de la interfaz de Unity y manejo de scripts.
- Package:
-
Importar el Package
-
Configuración de Escenas
-
Verificación de Componentes
- Revisa que los siguientes scripts estén presentes en tu proyecto:
AudioInitializer
AudioSettingsManager
AudioSettingsDropdown
SceneManager
ChangeSceneTimer
- Revisa que los siguientes scripts estén presentes en tu proyecto:
Note
Puedes testear y probar las escenas para ver en tiempo real como funcionan los scripts y sus funcionalidades.
Este componente gestiona los modos de altavoz disponibles y las transiciones entre ellos.
public class AudioSettingsManager : MonoBehaviour
{
public static AudioSettingsManager Instance { get; private set; }
[SerializeField] private AudioMixer audioMixer;
public AudioSpeakerMode[] speakerModes = {
AudioSpeakerMode.Mono,
AudioSpeakerMode.Stereo,
AudioSpeakerMode.Quad,
AudioSpeakerMode.Mode5point1,
};
// ... (resto del código)
}
Maneja la interfaz de usuario para la selección de modos de altavoz.
public class AudioSettingsDropdown : MonoBehaviour
{
[SerializeField] private TMP_Dropdown speakerModeDropdown;
[SerializeField] private GameObject warningPanel;
[SerializeField] private Button applyButton;
[SerializeField] private Button cancelButton;
// ... (resto del código)
}
Warning
Asegúrate de estar utilizando la version actualizada del TextMeshPro
de Unity.
- Dropdown: Asigna el prefab
SpeakerDropdown
al scriptAudioSettingsDropdown
. - Warning Panel: Asigna el prefab
WarningPanel
que se mostrará cuando se detecten cambios en las pantallas. - Continue Button:
Botón
para confirmar y aplicar cambios tras detectar un nuevo cambio de parlante. - Cancel Button:
Botón
para cancelar y no aplicar los cambios.
-
Inicialización
- La escena "LoadInitialization" se carga primero, inicializando la configuración de audio.
- Después de un breve retraso, se carga la escena principal.
-
Selección de Modo de Altavoz
- En la escena principal, utiliza el dropdown para seleccionar el modo de altavoz deseado.
- Los cambios se aplican inmediatamente con una transición suave.
-
Manejo de Advertencias
- Si se requiere un reinicio para aplicar los cambios, se mostrará un panel de advertencia.
- Utiliza los botones "Apply" o "Cancel" según sea necesario.
-
Navegación entre Escenas
- Utiliza el
SceneManager
para moverte entre diferentes escenas manteniendo la configuración de audio.
- Utiliza el
Tip
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.
Una vez que estemos en game. Cargará la escena LoadInitialization y pasará a MainScene.
Si cambiamos el tipo de speaker, aparecerá el panel de advertencia.
Si 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:
Una vez que queramos cambiar de escena, nos fijamos que el AudioMixer sigue con el mismo valor aplicado.
Vemos 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.
Ahora 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.
Si 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.
Esperamos un momento y…
En AudioSettingsManager
, ajusta el array speakerModes
:
public AudioSpeakerMode[] speakerModes = {
AudioSpeakerMode.Mono,
AudioSpeakerMode.Stereo,
AudioSpeakerMode.Quad,
AudioSpeakerMode.Mode5point1,
AudioSpeakerMode.Mode7point1 // Añadir si es necesario
};
En AudioSettingsDropdown
, modifica GetDisplayNameForSpeakerMode
:
private string GetDisplayNameForSpeakerMode(AudioSpeakerMode mode)
{
switch (mode)
{
case AudioSpeakerMode.Stereo: return "Estéreo";
case AudioSpeakerMode.Quad: return "Cuadrafónico";
case AudioSpeakerMode.Mode5point1: return "Surround 5.1";
// Añadir más casos según sea necesario
default: return mode.ToString();
}
}
Personaliza el SceneManager
para manejar la navegación entre escenas según tu estructura de proyecto:
public class SceneManager : MonoBehaviour
{
[SerializeField] public string mainSceneName = "MainScene";
[SerializeField] public string[] levelNames;
public void LoadNextLevel(int currentLevel)
{
if (currentLevel < levelNames.Length - 1)
{
UnityEngine.SceneManagement.SceneManager.LoadScene(levelNames[currentLevel + 1]);
}
else
{
Debug.Log("No hay más niveles disponibles");
}
}
// Añadir más métodos según sea necesario
}
Note
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.
¡Las contribuciones son bienvenidas! Si deseas mejorar este proyecto, sigue estos pasos:
- Haz un Fork del repositorio.
- Crea una rama nueva:
git checkout -b feature/nueva-funcionalidad
. - Realiza tus cambios y haz commit:
git commit -m 'Agrega nueva funcionalidad'
. - Haz push a la rama:
git push origin feature/nueva-funcionalidad
. - Abre un Pull Request.
Tip
Asegúrate de seguir las convenciones de codificación y agregar comentarios claros para facilitar la revisión.
Este 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. Consulta el archivo Licencia para más detalles.
Este proyecto no recopila información personal ni técnica de los usuarios. Para más detalles, consulta nuestras Políticas de Privacidad.
Si tienes preguntas, problemas o sugerencias, no dudes en contactarme:
- Email: [email protected]
- Twitter: @kaitoartzz
- Discord: kaitoowo
Espero 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 y con gusto mejoraremos juntos esta herramienta. ✨❤️
Desarrollado con ❤️ por KaitoArtz