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;
Info

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.

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


Documentación relevante