Unity接入GVoice腾讯实时语音

Unity接入GVoice腾讯实时语音

  • 一、介绍
  • 二、注册GVoice创建项目语音服务
    • 1.创建项目
    • 2.申请语音权限
    • 3.项目管理查看SDK初始化的一些参数和基本信息
    • 4.GVoice检测
  • 三、SDK下载
    • SDK是分为两种类型:
      • 独立版
      • 集成板
    • SDK放入Unity工程中
  • 四、语音代码写法
  • 五、GVoice踩坑
    • 语音权限问题
    • 打包问题
  • 六、总结

一、介绍

最近在做一个实时竞技类游戏,类似于王者荣耀类型的MOBA类实时联网游戏。针对战斗和组队界面需要加入语音的方便大家进行交流,看了几家语音价格也都是参差不齐最后选择的是腾讯的GVoice(价格很低折合费用下来一人一天0.012元),这个也是我们目前用的最合适的。后面我会把完整流程写下来并且把我踩的坑也讲一下,感谢大家的支持。

二、注册GVoice创建项目语音服务

GVoice官网
先进行账号注册,这里我就不过多提示了,直接进入开启服务的申请和创建项目。

进入控制台是这个样子的,右上角是创建新项目
在这里插入图片描述

1.创建项目

根据下属图进行对应的创建即可
在这里插入图片描述
创建之后进入创建项目的控制台如下图
在这里插入图片描述

2.申请语音权限

在这里插入图片描述
点击进入之后进行申请
在这里插入图片描述
申请之后可以找客服对接一下,让他帮你快速通过

3.项目管理查看SDK初始化的一些参数和基本信息

项目管理会弹出来界面有你需要的一些信息
在这里插入图片描述

4.GVoice检测

开通这个语音服务之后可以查看这个语音的检测在这里插入图片描述
在这里插入图片描述

三、SDK下载

GVoice的独立版官方文档,文档中有一些常规的错误和一些解决方案,当然这不是全部的坑都在里面,所有的API和调用方法是可以看的,踩的坑还是五花八门的,后面在继续说坑的问题。
GVoice的集成板官方文档
在这里插入图片描述

SDK是分为两种类型:

独立版

独立版是需要自己下载SDK拖到Unity项目中,这也是我尝试的方法,推荐这个方法。这里我也是主要讲一下独立版SDK的接入。

集成板

集成板则是需要在UnityStore中去关注下载这个sdk,在Unity中用PackageManager进行安装SDK,这里的安装方法我就不仔细说了,在Store中搜索GVoice找到腾讯加的插件下载安装到项目中即可。

SDK放入Unity工程中

SDK分为海外版和国内版,SDK连接下载。
打开网页下载自己对应的版本如下图
在这里插入图片描述
下载解压完成之后如下图
在这里插入图片描述
将上面两个文件夹放入到Unity中
在这里插入图片描述

四、语音代码写法

这里可以参考我上面的官方独立版API,里面写的更全面一些,这里我只接入了小队语音,还有一些高级的玩法我们没有用到就没有接入。

这是我创建的测试工程UI和使用到的一些API如下图
在这里插入图片描述
代码如下我就不过多解释了备注都加了差不多应该都能看明白,SDK的appId和appKey在自己创建的项目中的控制台中找一下,然后下面可以参考我写的一些小队语音的常规操作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 updatevoid Start(){sVoiceEngine = GCloudVoice.GetEngine();//接入时请将"AppID"替换为开通业务时从管理控制台获取的 AppIDstring appID = "**********";//接入时请将"AppKey"替换为开通业务时从管理控制台获取的 AppKeystring appkey = "*******************************";// 接入时替换为玩家唯一标识符//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 framevoid 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>/// 暂停语音/// </summary>public void VoiceEnginePause() {sVoiceEngine.Pause();   }/// <summary>/// 继续语音/// </summary>public void VoiceEngineResume(){sVoiceEngine.Resume();}/// <summary>/// 打开麦克风/// </summary>public void VoiceOpenMic() {sVoiceEngine.OpenMic();}/// <summary>/// 关闭麦克风/// </summary>public void VoiceCloseMic() {sVoiceEngine.CloseMic();}/// <summary>/// 打开扬声器/// </summary>public void VoiceOpenSpeaker() {sVoiceEngine.OpenSpeaker();}/// <summary>/// 关闭扬声器/// </summary>public void VoiceCloseSpeaker() {sVoiceEngine.CloseSpeaker();}
}

注意这个测试只能在Window编辑器下去跑,在Android编辑器模式下是跑不了的,需要修改一下他原来GCloudVoice的代码如下图所示,将原来的宏定义修改如下(不会影响原来打包之后的安卓手机运行)
在这里插入图片描述

五、GVoice踩坑

语音权限问题

这里我开始测试的时候是用的编辑器做的测试,这种情况下就需要电脑的麦的权限是开启的,开始我的电脑麦的权限是关闭的情况下运行的发现没有声音以为是插件接入的有问题,在开启语音的过程中在开启麦的权限也是不行的(这里只针对编辑器和电脑端),这里测试的环境必须是先确保麦的权限是开启的在运行Unity去初始化SDK。
这里还有一点是如果你退出的时候没有自己退出房间和关闭麦他是不会自己退出的,等于说你在取消Unity的运行也会有声音,除非你把Unity关闭这样才能退出这个语音房间,不然只能你手动退出。

打包问题

如果是2020以上的Unity需要将Plugin下的含有.jar的父级文件夹加上后缀.androidlib如下图(加入之后才能识别.jar的文件,打包到手机平台才能没有问题 官方文档标记)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
如果没有加后缀上面打包出现的手机端运行报错如下
4111官方文档解释是SDK初始化为成功
请添加图片描述

六、总结

上述是我在接入GVoiceSDK时遇到的一些问题和完整流程的整理,有误区的地方希望指正,感谢大家的支持和关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【canvas】获取鼠标点击位置坐标的颜色信息

在项目当中&#xff0c;要实现某业务需求例如PS魔棒功能时&#xff0c;则需要获取点击坐标的颜色信息。 功能不复杂&#xff0c;代码也很少&#xff0c;一看便知~~ 核心API为getImageData&#xff0c;传入4个参数&#xff0c;前2个为点击坐标xy&#xff0c;后2个都传1&#xf…

python调用golang中函数方法

一、原因说明&#xff1a;由于simhash方法有多种实现方式&#xff0c;现python中simhash方法与golang中的不一样&#xff0c;需要两者代码生成结果保持一致&#xff0c;故采用python中的代码调用golang编译的so文件来实现。 环境配置&#xff1a;①Windows10系统要有gcc环境&a…

ADSelfService Plus发布离线MFA功能,强化远程工作安全性

ManageEngine ADSelfService Plus推出离线多因素身份验证&#xff0c;提升远程工作安全性确保通过先进的验证方法对企业数据进行授权访问&#xff0c;无论时间、地点或连接问题如何允许远程用户安全进行身份验证&#xff0c;即使未连接到认证服务器或互联网使用高度安全的基于T…

每周编辑精选|希尔贝壳语音数据集系列上线、中国学者建立乳腺癌预后评分系统 MIRS

&#x1f3ee;新春佳节&#xff0c;归程千里为团圆 &#x1f3ee;人间烟火&#xff0c;年味浓浓阖家欢 辞别玉兔&#xff0c;金龙迎春。明晚就是大年三十除夕夜了&#xff01;HyperAI超神经在这里提前祝大家新春快乐&#xff5e;龙行龘龘(d)&#xff01;本周 hyper.ai 官网上线…

Lua协程-coroutine

lua也有协程这个机制&#xff0c;用以完成非抢占式的多任务处理。 协程与线程 协程和线程类似&#xff0c;有自己的堆栈、局部变量、指令指针等等。但同时也有不一致的地方&#xff0c;其中最重要的地方在于多线程程序可以同一时间运行多个线程&#xff0c;而协程同一时间只能…

Vue前端框架--Vue工程项目问题总结{脚手架 Vue-cli}

Vue脚手架部署问题总结 我所遇到的一共两大问题 只有先执行npm install之后 才能run serve 否则会报错 vue-cli-serve不是内部或者外部的命令&#xff0c;也不是可运行的程序或者批处理文件的错误 1. 运行npm install会报错 2. 运行npm run serve报错 nodejs官网为 https://no…

C#中实现串口通讯和网口通讯(使用SerialPort和Socket类)

仅作自己学习使用 1 准备部份 串口通讯需要两个调试软件commix和Virtual Serial Port Driver&#xff0c;分别用于监视串口和创造虚拟串口。网口通讯需要一个网口调试助手&#xff0c;网络上有很多资源&#xff0c;我在这里采用的是微软商店中的TCP/UDP网络调试助手&#xff0…

【leetcode热题100】删除排序链表中的重复元素

难度&#xff1a; 简单通过率&#xff1a; 41.5%题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述 给定一个排序链表&#xff0c;删除所有重复的元素&#xff0c;使得每个元素只出现一次。 示例 1: 输入: 1->1->…

cleanmymacX和腾讯柠檬哪个好用

很多小伙伴在使用Mac时&#xff0c;会遇到硬盘空间不足的情况。遇到这种情况&#xff0c;我们能做的就是清理掉一些不需要的软件或者一些占用磁盘空间较大的文件来腾出空间。我们可以借助一些专门的清理工具&#xff0c;本文中我们来推荐几款好用的Mac知名的清理软件。并且将Cl…

C语言:亲密数对

题目描述 在自然数中有一种这样的数&#xff1a;它自身是一个完全平方数&#xff0c;加上1之后是一个素数&#xff0c;这一对数被称为亲密数对&#xff0c;请编程找出指定区域内的所有亲密数对。 例如在[10,100]之间的亲密数对有&#xff1a;&#xff08;16,17&#xff09;&am…

SQL在云计算中的新角色:重新定义数据分析

文章目录 1. 云计算与数据分析的融合2. SQL在云计算中的新角色3. 分布式SQL查询引擎4. SQL-on-Hadoop解决方案5. SQL与其他数据分析工具的集成6. 实时数据分析与SQL7. SQL在云数据仓库中的角色8. 安全性与隐私保护9. SQL的未来展望《SQL数据分析实战&#xff08;第2版&#xff…

SQL笔记-2024/01/31

cross join 两个表的笛卡尔积 例如&#xff1a; select s.name student_name,s.age student_age,s.class_id class_id,c.name class_name from student s cross join class c; 子查询 select s.name name,s.score score,s.class_id class_id from student s where s.class_id …

14.scala隐式转换

目录 概述实践代码执行结果 结束 概述 隐式转换&#xff1a;偷偷的(隐式)对现有功能进行增强(转换) 实践 代码 package com.fun.scalaimport java.io.File import scala.io.Sourceobject ImplicitApp {def main(args: Array[String]): Unit {// implicit 2 to 等价 &…

vuecli3 执行 npm run build 打包命令报错:TypeError: file.split is not a function

问题 今天有个项目在打包的时候遇到了一个问题&#xff0c;就是执行 npm run build 命令的时候报错了&#xff0c;如下&#xff1a; 解决 我排查了一下&#xff0c;模拟代码如下&#xff1a;在打包的时候用了 MinChunkSizePlugin const webpack require("webpack"…

LabVIEW多任务实时测控系统

LabVIEW多任务实时测控系统 面对现代化工业生产的复杂性和多变性&#xff0c;传统的测控系统已难以满足高效、精准、可靠的监控和控制需求。因此&#xff0c;开发一种基于LabVIEW的智能测控系统&#xff0c;能够提高生产效率&#xff0c;保证生产安全&#xff0c;是解决现代工…

ubuntu 没有屏幕安装QT(SSH远程登陆下)

1背景说明 需要在SSH登陆的ubuntu远程上安装QT&#xff0c;但是远程电脑没有屏幕&#xff0c;报了这个错误“QXcbConnection: Could not connect to display”。 2网上搜索有2种解决方案 由于远程服务器没有配置屏幕&#xff0c;都失败了 2.1配置屏幕关闭 vim ~/.bashrc …

打卡今天学习的命令 (linux

1.1 cp - 复制文件或目录 cp source destination cp -r source_directory destination # 递归复制目录及其内容1.2 rm - 删除文件或目录 rm file rm -r directory # 递归删除目录及其内容1.3 mv - 移动/重命名文件或目录 mv source destination mv old_name new_name # 重…

怎么清理电脑内存?详细图文教程分享!

“我的电脑用了才不到一年&#xff0c;现在内存总是不足。想问问大家平常遇到电脑内存不足的情况时有什么好用的清理方法吗&#xff1f;” 随着电脑使用时间的增长&#xff0c;内存占用可能会不断增加&#xff0c;导致电脑运行缓慢。为了保持电脑的良好性能&#xff0c;定期清理…

手把手教你实现Kmeans聚类,不使用MATLAB工具箱,纯手写matlab代码免费获取,UCI数据集为例...

K均值&#xff08;K-means&#xff09;是一种常用的聚类算法&#xff0c;用于将数据集划分为K个不同的组&#xff08;簇&#xff09;&#xff0c;使得每个数据点属于与其最近的均值点所代表的簇。K均值算法的基本思想是通过迭代优化&#xff0c;将数据点分配到K个簇中&#xff…

C语言的联合体:一种节省内存的数据结构

在C语言中&#xff0c;联合体&#xff08;union&#xff09;是一种特殊的数据结构&#xff0c;它允许我们在相同的内存位置存储不同的数据类型。这意味着联合体中的所有成员都共享同一块内存空间&#xff0c;因此它们不能同时存储其各自的值。联合体的主要目的是节省内存&#…