十分鐘, 為你的網路連線遊戲加上語音聊天功能

Ryan Tseng
Photon Taiwan
Published in
8 min readJul 24, 2019

在前幾篇的文章中, 小編有示範用 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/

--

--