一、介紹
最近在做一個(gè)實(shí)時(shí)競(jìng)技類(lèi)游戲,類(lèi)似于王者榮耀類(lèi)型的MOBA類(lèi)實(shí)時(shí)聯(lián)網(wǎng)游戲。針對(duì)戰(zhàn)斗和組隊(duì)界面需要加入語(yǔ)音的方便大家進(jìn)行交流,看了幾家語(yǔ)音價(jià)格也都是參差不齊最后選擇的是騰訊的GVoice(價(jià)格很低折合費(fèi)用下來(lái)一人一天0.012元),這個(gè)也是我們目前用的最合適的。后面我會(huì)把完整流程寫(xiě)下來(lái)并且把我踩的坑也講一下,感謝大家的支持。
二、注冊(cè)GVoice創(chuàng)建項(xiàng)目語(yǔ)音服務(wù)
GVoice官網(wǎng)
先進(jìn)行賬號(hào)注冊(cè),這里我就不過(guò)多提示了,直接進(jìn)入開(kāi)啟服務(wù)的申請(qǐng)和創(chuàng)建項(xiàng)目。
進(jìn)入控制臺(tái)是這個(gè)樣子的,右上角是創(chuàng)建新項(xiàng)目
1.創(chuàng)建項(xiàng)目
根據(jù)下屬圖進(jìn)行對(duì)應(yīng)的創(chuàng)建即可
創(chuàng)建之后進(jìn)入創(chuàng)建項(xiàng)目的控制臺(tái)如下圖
2.申請(qǐng)語(yǔ)音權(quán)限
點(diǎn)擊進(jìn)入之后進(jìn)行申請(qǐng)
申請(qǐng)之后可以找客服對(duì)接一下,讓他幫你快速通過(guò)
3.項(xiàng)目管理查看SDK初始化的一些參數(shù)和基本信息
項(xiàng)目管理會(huì)彈出來(lái)界面有你需要的一些信息
4.GVoice檢測(cè)
開(kāi)通這個(gè)語(yǔ)音服務(wù)之后可以查看這個(gè)語(yǔ)音的檢測(cè)
三、SDK下載
GVoice的獨(dú)立版官方文檔,文檔中有一些常規(guī)的錯(cuò)誤和一些解決方案,當(dāng)然這不是全部的坑都在里面,所有的API和調(diào)用方法是可以看的,踩的坑還是五花八門(mén)的,后面在繼續(xù)說(shuō)坑的問(wèn)題。
GVoice的集成板官方文檔
SDK是分為兩種類(lèi)型:
獨(dú)立版
獨(dú)立版是需要自己下載SDK拖到Unity項(xiàng)目中,這也是我嘗試的方法,推薦這個(gè)方法。這里我也是主要講一下獨(dú)立版SDK的接入。
集成板
集成板則是需要在UnityStore中去關(guān)注下載這個(gè)sdk,在Unity中用PackageManager進(jìn)行安裝SDK,這里的安裝方法我就不仔細(xì)說(shuō)了,在Store中搜索GVoice找到騰訊加的插件下載安裝到項(xiàng)目中即可。
SDK放入U(xiǎn)nity工程中
SDK分為海外版和國(guó)內(nèi)版,SDK連接下載。
打開(kāi)網(wǎng)頁(yè)下載自己對(duì)應(yīng)的版本如下圖
下載解壓完成之后如下圖
將上面兩個(gè)文件夾放入到Unity中
四、語(yǔ)音代碼寫(xiě)法
這里可以參考我上面的官方獨(dú)立版API,里面寫(xiě)的更全面一些,這里我只接入了小隊(duì)語(yǔ)音,還有一些高級(jí)的玩法我們沒(méi)有用到就沒(méi)有接入。
這是我創(chuàng)建的測(cè)試工程UI和使用到的一些API如下圖
代碼如下我就不過(guò)多解釋了備注都加了差不多應(yīng)該都能看明白,SDK的appId和appKey在自己創(chuàng)建的項(xiàng)目中的控制臺(tái)中找一下,然后下面可以參考我寫(xiě)的一些小隊(duì)語(yǔ)音的常規(guī)操作API,如果想要接入其他的API功能可以在官方的API中在查找一下
using gcloud_voice;
using System;
using UnityEngine;
using static gcloud_voice.IGCloudVoice;
public class SDKInit : MonoBehaviour
{
IGCloudVoice sVoiceEngine;
// Start is called before the first frame update
void Start()
{
sVoiceEngine = GCloudVoice.GetEngine();
//接入時(shí)請(qǐng)將"AppID"替換為開(kāi)通業(yè)務(wù)時(shí)從管理控制臺(tái)獲取的 AppID
string appID = "**********";
//接入時(shí)請(qǐng)將"AppKey"替換為開(kāi)通業(yè)務(wù)時(shí)從管理控制臺(tái)獲取的 AppKey
string appkey = "*******************************";
// 接入時(shí)替換為玩家唯一標(biāo)識(shí)符
//string openID = "970001";
string openID = DateTime.Now.ToString();
int AppInfoID = sVoiceEngine.SetAppInfo(appID, appkey, openID);
Debug.LogError("AppInfoID = " + AppInfoID);
int InitId = sVoiceEngine.Init();
Debug.LogError("InitId = " + InitId);
sVoiceEngine.OnJoinRoomComplete += JoinRoomCompleteHandler;
}
// Update is called once per frame
void Update()
{
if (sVoiceEngine != null)
{
sVoiceEngine.Poll();
}
if (Input.GetKeyDown(KeyCode.Space))
{
GetRoomNumber();
}
}
public void GetRoomNumber()
{
string roomName = "abc";
int memNum = 8;
RoomMembers[] memberlist = new RoomMembers[memNum];
sVoiceEngine.GetRoomMembers(roomName, memberlist, memNum);
Debug.LogError("memberlist.Length = " + memberlist.Length);
Debug.LogError("memberlist[0].memberid = " + memberlist[0].memberid);
}
public void StartTeamRoom()
{
sVoiceEngine.SetMode(GCloudVoiceMode.RealTime);
string mRoomName = "abc";
int mTimeOut = 10000;
sVoiceEngine.JoinTeamRoom(mRoomName, mTimeOut);
}
void JoinRoomCompleteHandler(GCloudVoiceCompleteCode code, string roomName, int memberID)
{
Debug.LogError("code = " + code);
Debug.LogError("roomName = " + roomName);
Debug.LogError("memberID = " + memberID);
}
/// <summary>
/// 暫停語(yǔ)音
/// </summary>
public void VoiceEnginePause()
{
sVoiceEngine.Pause();
}
/// <summary>
/// 繼續(xù)語(yǔ)音
/// </summary>
public void VoiceEngineResume()
{
sVoiceEngine.Resume();
}
/// <summary>
/// 打開(kāi)麥克風(fēng)
/// </summary>
public void VoiceOpenMic()
{
sVoiceEngine.OpenMic();
}
/// <summary>
/// 關(guān)閉麥克風(fēng)
/// </summary>
public void VoiceCloseMic()
{
sVoiceEngine.CloseMic();
}
/// <summary>
/// 打開(kāi)揚(yáng)聲器
/// </summary>
public void VoiceOpenSpeaker()
{
sVoiceEngine.OpenSpeaker();
}
/// <summary>
/// 關(guān)閉揚(yáng)聲器
/// </summary>
public void VoiceCloseSpeaker()
{
sVoiceEngine.CloseSpeaker();
}
}
注意這個(gè)測(cè)試只能在Window編輯器下去跑,在Android編輯器模式下是跑不了的,需要修改一下他原來(lái)GCloudVoice的代碼如下圖所示,將原來(lái)的宏定義修改如下(不會(huì)影響原來(lái)打包之后的安卓手機(jī)運(yùn)行)
五、GVoice踩坑
語(yǔ)音權(quán)限問(wèn)題
這里我開(kāi)始測(cè)試的時(shí)候是用的編輯器做的測(cè)試,這種情況下就需要電腦的麥的權(quán)限是開(kāi)啟的,開(kāi)始我的電腦麥的權(quán)限是關(guān)閉的情況下運(yùn)行的發(fā)現(xiàn)沒(méi)有聲音以為是插件接入的有問(wèn)題,在開(kāi)啟語(yǔ)音的過(guò)程中在開(kāi)啟麥的權(quán)限也是不行的(這里只針對(duì)編輯器和電腦端),這里測(cè)試的環(huán)境必須是先確保麥的權(quán)限是開(kāi)啟的在運(yùn)行Unity去初始化SDK。
這里還有一點(diǎn)是如果你退出的時(shí)候沒(méi)有自己退出房間和關(guān)閉麥他是不會(huì)自己退出的,等于說(shuō)你在取消Unity的運(yùn)行也會(huì)有聲音,除非你把Unity關(guān)閉這樣才能退出這個(gè)語(yǔ)音房間,不然只能你手動(dòng)退出。
打包問(wèn)題
如果是2020以上的Unity需要將Plugin下的含有.jar的父級(jí)文件夾加上后綴.androidlib如下圖(加入之后才能識(shí)別.jar的文件,打包到手機(jī)平臺(tái)才能沒(méi)有問(wèn)題 官方文檔標(biāo)記)
如果沒(méi)有加后綴上面打包出現(xiàn)的手機(jī)端運(yùn)行報(bào)錯(cuò)如下
4111官方文檔解釋是SDK初始化為成功文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-828186.html
六、總結(jié)
上述是我在接入GVoiceSDK時(shí)遇到的一些問(wèn)題和完整流程的整理,有誤區(qū)的地方希望指正,感謝大家的支持和關(guān)注。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-828186.html
到了這里,關(guān)于Unity接入GVoice騰訊實(shí)時(shí)語(yǔ)音的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!