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

2022.01.22 / Unity 引擎

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

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 來實作。

 1using System.Collections;
 2using System.Linq;
 3using UnityEngine;
 4
 5public class DissonanceMicrophoneChecker : MonoBehaviour
 6{
 7    private IEnumerator Start()
 8    {
 9        // 檢查是否有麥克風權限,否則提出權限請求
10        if (!Application.HasUserAuthorization(UserAuthorization.Microphone))
11        {
12            yield return Application.RequestUserAuthorization(UserAuthorization.Microphone);
13        }
14
15        // 再次檢查,如仍然無權限則將遊戲關閉
16        if (Application.HasUserAuthorization(UserAuthorization.Microphone))
17        {
18            Debug.Log("Device: " + Microphone.devices.Select(x => x.ToString()));
19        }
20        else
21        {
22            Application.Quit();
23        }
24    }
25}

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

相關文章

Ted Liou

雲科碩士在讀中,專注於 Unity C#、TouchDesigner 技術,常把技術筆記分享到部落格,偶爾還直接挪用文章來當教材的研究生。