[Unity] 解決 Dissonance 於 Quest 2 平台麥克風無作動問題

Dissonance (全名:Dissonance Voice Chat) 是一個運作於 Unity Engine 的線上多人語音系統插件,他本身沒有多人連線功能,而是依附於常見的 UNET、Photon、Mirror、Steamworks.NET 或最新的 Netcode 多人連線架構,讓多人遊戲可同時擁有語音聊天功能。這支插件原價 75 美金,如非急需的話可在特殊節日或黑五等特價日以 35 美元或更低的價格購入。


插件資訊


Dissonance 配置完成後,在 PC 端啟動後可以直接運作,但在 Quest 2 上卻沒有任何反應 (可聽不可說),因為 Quest 2 的作業系統是 Android。現在的 Android 為保障安全性,對於「權限」的使用鎖得很緊,何況是能作為監聽使用的麥克風。

照理說 Unity Engine 應該要在編譯時偵測到 Dissonance 有使用到麥克風時,自動在 APK 中加入麥克風權限的需求。但目前的狀況是,在用 Quest 2 啟動程式時,並不會有任何的權限同意視窗供你選擇,導致此硬體不會有任何作動。

為解決此問題,我們就需要在遊戲啟動時 (可放在 Splash 或登入場景) 讓他執行一個腳本來請求權限,可使用 Unity Engine 的 Application.HasUserAuthorization 與 Application.RequestUserAuthorization 來實作。

using System.Collections;
using System.Linq;
using UnityEngine;

public class DissonanceMicrophoneChecker : MonoBehaviour
{
    private IEnumerator Start()
    {
        // 檢查是否有麥克風權限,否則提出權限請求
        if (!Application.HasUserAuthorization(UserAuthorization.Microphone))
        {
            yield return Application.RequestUserAuthorization(UserAuthorization.Microphone);
        }

        // 再次檢查,如仍然無權限則將遊戲關閉
        if (Application.HasUserAuthorization(UserAuthorization.Microphone))
        {
            Debug.Log("Device: " + Microphone.devices.Select(x => x.ToString()));
        }
        else
        {
            Application.Quit();
        }
    }
}

把這支腳本掛在遊戲啟動後的第一個場景中,在執行程式時就可以看到允許權限的視窗,點選允許後 Dissonance 的語音系統將能正常作動。