十分鐘, 為你的網路連線遊戲加上語音聊天功能
在前幾篇的文章中, 小編有示範用 PUN 2 來實作一個網路連線射擊遊戲.
玩家進入遊戲場後, 要操控自己的機器人, 一邊用動感光波射擊其他玩家, 同時也要躲避其他玩家的攻擊.
詳細作法請參考: PUN 2 | 連線射擊遊戲 (1/4)
話說, 這個遊戲太安靜了. 沒能和遊戲場中朋友同好一起喊殺吆喝, 實在少了玩家間即時互動的樂趣. 這回, 小編就來示範, 簡單幾個步驟, 即能為網路連線遊戲加上語音聊天的功能.
先介紹這次用到的套件: Photon Voice 2.
Photon Voice 2 為 Photon Voice 的後繼版本, 能更好的支援 Unity. 其與 PUN 2 完全相容, 可將語音聊天和音頻流, 傳輸到 PUN 2 的相關應用中, 簡化麻煩的程式連接的工作流程, 亦可切分開來, 搭配 Photon Realtime, Photon Bolt 或 Photon Chat 一起運作, 甚至是獨立為一隻應用程式也可以. 其套件包可以從 Asset Store 直接下載.
開啟遊戲專案, 匯入 Photon Voice 2 套件
首先, 將網路連線射擊遊戲的 Unity 專案複製一份, 取名叫做 pun_basic_voice.
在 Unity 開啟 pun_basic_voice 專案.
開啟 Asset Store, 找到 Photon Voice 2 FREE, 下載並且匯入.
在 Import Unity Package 視窗, 點按 Import 全部匯入.
匯入完成後, 可以看到在 Project 視窗, Assets 資料夾底下, 多了一個叫做 Photon Voice 的資料夾.
設定 AppId
使用 Photon Voice 2 套件前, 需要輸入 AppId.
如何取得 AppId 呢?
用戶可到 Photon Cloud 註冊/登入, 在 Cloud Dashboard 點按 建立新 應用程式.
Photon Type 選 “Photon Voice”.
名稱可隨意輸入.
按 建立 建立新的應用程式.
將新應用程式的應用程式 ID 複製起來.
取得 AppId 後, 從選單 Window/Photon Unity Networking/Highlight Server Settings 叫出 PhotonServer Settings, 將 AppId 貼在 App Id Voice 欄位中.
若在先前實作網路連線遊戲時, 已有申請 AppId 並輸入給 App Id Realtime. 也可將 App Id Realtime 的數值直接複製起來, 並貼到 App Id Voice 欄位中.
到此, 我們把 pun_basic_voice 遊戲專案的基礎環境設定好了.
動手做進一步的整合之前, 先簡單的說明一下 Photon Voice 2 的整合概念.
Photon Voice 2 整合概念
Photon Voice 2 套件與 PUN 2 遊戲專案的整合, 會在遊戲連接上 Photon Cloud 並進入遊戲室後, 自動建立語音聊天的通道.
Photon Voice 2 套件提供有 PhotonVoiceNetwork 元件來與遊戲場景整合, 並需設定其搭配的 Recorder 和 Speaker 元件來處理錄音與播音的細節.
另外, 在遊戲專案的角色 Prefab 部份, 也需與 PhotonVoiceView 元件做整合, 以及設定其搭配的 Recorder 和 Speaker 元件.
首先, 來為遊戲場景增加 Photon Voice Network 元件.
在遊戲場景增加 Photon Voice Network 元件
pun_basic_voice 有四個遊戲場景, 分别是場景- Room for 1, 場景- Room for 2, 場景- Room for 3 與場景- Room for 4.
開啟場景- Room for 1.
在 Hierarchy 視窗, 新增一個 Empty GameObject, 取名為 “Voice”.
在 Hierarchy 視窗, 選取 Voice.
然後在 Inspector 視窗裡, 點按 Add Component, 增加一個 Photon Voice Network 元件, 並將:
- Auto Connect And Join: 當連線進入 PUN 遊戲室時, 自動建立語音連線,
- Auto Leave And Disconnect: 當離開 PUN 遊戲室時, 自動切斷語音連線,
- Create Speaker If Not Found: 自動創建 Speaker 實例來處理語音流,
等三個選項勾選起來.
接著, 在 Inspector 視窗裡, 再點按 Add Component, 增加一個 Recorder 元件, 並將:
- Transmit Enabled: 連通後即開始傳輸,
- Debug Echo: 除錯測試回音, 可聽到自己講話的聲音,
等兩個選項勾選起來.
最後, 再把 Recorder 元件拖拉到 Photon Voice Network 元件的 Primary Recorder 欄位中.
到此, 即為場景- Room for 1 增加了 Photon Voice Network 與 Recorder 等元件與設定. 將場景- Room for 1 存檔.
同樣的, 為場景- Room for 2, 場景- Room for 3 與場景- Room for 4, 也增加 Photon Voice Network 與 Recorder 等元件與設定, 並存檔.
再來, 針對有帶入 Photon View 元件的遊戲角色 Prefab, 其需要增加 Photon Voice View 元件.
在遊戲角色增加 Photon Voice View 元件
開啟 Prefab- My Robot Kyle.
在 Inspector 視窗, 點按 Add Component, 新增一個 Photon Voice View 元件. 並將:
- Auto Create Recorder If Not Found: 自動創建 Recorder 實例來處理錄音流,
- Use Primary Recorder: 設定主要使用的 Recorder 元件
- Setup Debug Speaker: 啟用除錯測試 Speaker.
等三個選項勾選起來.
然後, 在 Inspector 視窗, 再點按 Add Component, 新增一個 Recorder 元件, 並將:
- Transmit Enabled: 連通後即開始傳輸,
- Debug Echo: 除錯測試回音, 可聽到自己講話的聲音,
等兩個選項勾選起來,
最後, 再把 Recorder 元件拖拉到 Photon Voice View 元件的 Recorder In Use 欄位中.
到此, 即為 Prefab- My Robot Kyle 增加了 Photon Voice View 與 Recorder 等元件與設定. 將 Prefab- My Robot Kyle 儲存.
好的, 我們已完成遊戲場景與遊戲角色 Prefab 的全部設定, 可以執行遊戲來測試語音聊天的功能了.
遊戲進行時, 自動建立語音聊天室
在 Unity, 切換到場景 Launcher, 並執行.
在玩家進入遊戲室動態生成出遊戲角色時, 也自動建立了語音通道.
這時對著麥克風發出聲音, 會從耳機或喇叭通到自己的聲音.
若有其他玩家同在遊戲室中, 彼此發出的聲音也都會互相聽的到.
結語補充
這次介紹的 Photon Voice 2 整合作法, 是搭配 PUN 2 在進入遊戲室後自動建立語音聊天室, 並用默認的方式讓全部玩家同處在相同語音聊天室中.
其實, Photon Voice 2 提供了更多細緻的功能, 包括噪音抑止, 3D 音效體驗, Push-To-Talk, 私人語音對談, 聊天對話群組等細緻的功能. 小編會在後續的文章中做介紹, 敬請期待.
如果對本篇的範例說明有些疑問, 歡迎來我們粉絲團做進一步的討論.
粉絲團: https://www.facebook.com/photoncloudtw/