当前位置: 首页 > article >正文

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 update
    void Start()
    {
        sVoiceEngine = GCloudVoice.GetEngine();

        //接入时请将"AppID"替换为开通业务时从管理控制台获取的 AppID
        string appID = "**********";

        //接入时请将"AppKey"替换为开通业务时从管理控制台获取的 AppKey
        string 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 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>
    /// 暂停语音
    /// </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.kler.cn/a/229425.html

相关文章:

  • centos 8 中安装Docker
  • IDEA的Java注释在Toggle Rendered View下的字号调整方式
  • E12.【C语言】练习:求两个数的最大公约数
  • 极客说|Azure AI Agent Service 结合 AutoGen/Semantic Kernel 构建多智能体解决⽅案
  • 深入Android架构(从线程到AIDL)_30 JNI架构原理_Java与C的对接03
  • C++并发编程之跨应用程序与驱动程序的单生产者单消费者队列
  • 【安卓跨程序共享数据,探究ContentProvider】
  • 动态规划01 三步问题[C++]
  • HarmonyOS鸿蒙ArkTS证件照生成模板(适合二次开发,全套源码版)
  • 正点原子-STM32通用定时器学习笔记(1)
  • 防范恶意勒索攻击!亚信安全发布《勒索家族和勒索事件监控报告》
  • 深度学习(12)--Mnist分类任务
  • 阿里云游戏服务器租用费用价格组成,费用详单
  • 跟着pink老师前端入门教程-day17
  • linker list
  • 计组学习笔记2024/2/5
  • 线上编程答疑解惑回顾,初学编程中文编程在线屏幕共享演示
  • 深度学习本科课程 实验1 Pytorch基本操作
  • Linux笔记之bash脚本中的$符号
  • SpringBoot 拦截器Intercepto的创建与基本使用
  • 【C语言不能不会的操作】调试-万字详解【windows操作系统下】(会写bug还会调试解决bug的程序员简直帅呆了,赶紧点赞收藏)
  • 【ESP32+Python】WIFI连接包括固定账号密码+选择WIFI在输入密码
  • 开源机器人ros 基本概念详细介绍
  • C++之程序内存分配方式
  • springboot(ssm考试信息报名系统 在线考试报名系统Java系统
  • 如何从dockerhub 中运行一个简单项目