Es posible permitir a los jugadores seleccionar dispositivos de audio en Unity usando FishyVoice (que combina FishNetworking y UniVoice). Aquí te explico cómo hacerlo paso a paso:
1. Obtener la lista de dispositivos de audio disponibles
Primero, necesitas listar los dispositivos de entrada de audio disponibles en el sistema. Unity proporciona una API para esto:
using UnityEngine;
// Obtener todos los dispositivos de micrófono disponibles
string[] devices = Microphone.devices;
Puedes mostrar esta lista en un Dropdown de la UI de Unity (como un TMP_Dropdown) para que el jugador seleccione su dispositivo preferido.
2. Configurar la UI para selección de dispositivos
Crea un menú en tu escena con un componente Dropdown (o TMP_Dropdown) y carga los dispositivos detectados:
using TMPro;
using UnityEngine.UI;
public class DeviceSelector : MonoBehaviour
{
    public TMP_Dropdown dropdown; // Referencia al Dropdown de la UI
    void Start()
    {
        // Limpiar opciones existentes
        dropdown.ClearOptions();
        // Obtener dispositivos y convertirlos en opciones del Dropdown
        dropdown.AddOptions(new List<string>(Microphone.devices));
    }
}
3. Configurar FishyVoice/UniVoice con el dispositivo seleccionado
UniVoice generalmente requiere un dispositivo de entrada para el chat de voz. Cuando el jugador selecciona un dispositivo, actualiza la configuración de UniVoice:
using UnityEngine;
using TMPro;
using UniVoice; // Asegúrate de tener los namespaces correctos
public class VoiceManager : MonoBehaviour
{
    public TMP_Dropdown deviceDropdown;
    private VoiceChatController voiceController;
    void Start()
    {
        voiceController = GetComponent<VoiceChatController>();
        
        // Configurar el evento de selección del Dropdown
        deviceDropdown.onValueChanged.AddListener(OnDeviceSelected);
    }
    private void OnDeviceSelected(int index)
    {
        string selectedDevice = Microphone.devices[index];
        
        // Detener cualquier transmisión activa
        if (voiceController.IsTransmitting)
            voiceController.StopTransmit();
        
        // Configurar el nuevo dispositivo en UniVoice
        voiceController.SetInputDevice(selectedDevice);
        
        // Opcional: Reiniciar la transmisión automáticamente
        voiceController.StartTransmit();
    }
}
4. Integrar con FishNetworking
FishyVoice ya maneja la integración entre FishNetworking (para redes) y UniVoice (para voz). Asegúrate de que el VoiceChatController esté configurado correctamente en tu NetworkManager o en el prefab del jugador.
- Ejemplo de configuración en un jugador:
 
public class PlayerVoice : NetworkBehaviour
    {
        private VoiceChatController voiceController;
    
        void Start()
        {
            voiceController = GetComponent<VoiceChatController>();
            
            // Solo el jugador local controla su dispositivo de entrada
            if (IsOwner)
            {
                // Configura el dispositivo seleccionado aquí si es necesario
            }
        }
    }
5. Consideraciones adicionales
- 
Permisos en plataformas móviles/Web: Asegúrate de solicitar permisos de micrófono en plataformas como Android/iOS o WebGL.
 - 
Feedback visual: Muestra el dispositivo seleccionado y el estado del micrófono (ej: un icono cuando está transmitiendo).
 - 
Pruebas: Verifica que el cambio de dispositivo funcione en tiempo real y que el audio se transmita correctamente a otros jugadores.
 
Documentación relevante
- 
UniVoice: Revisa la API para métodos como
SetInputDevice()o configuraciones avanzadas. - 
FishNetworking: Asegúrate de que los componentes de red estén sincronizados (ej: usando
[ObserversRpc]si necesitas notificar a otros jugadores sobre cambios de dispositivo).