王者荣耀Unity3D集成腾讯语音GVoice SDK

雅提示:最近发现腾讯GVoice有另外一个官网,叫做腾讯游戏服务,经过对比发现是网站才是行的,下面我介绍的不行量是已经废除之,但无掌握为啥总的网站并未直接链接到新网址而是依然保留了。不过新官网的文档更加详实,SDK也存有创新,所以建议去新官网下载SDK和Demo,接入流程基本没吗异常变迁。

日前景象

  前段时间(9.23)生病了,去诊所检查,医生说可能是传染病,如果确诊的讲话需要休学一年,并且没有诊断之前不可知转母校上课。当时听到这个的时光我是雅担心自身的学业的,因为怕如果病好了今后转学校课程落下最为多,补不回了。当时纪念着,如果的确休学一年,我要涉及几什么为?现在死三正上无多久的清收,如果休学的话,也不能够放弃学业,正好趁机这机会做来自己喜好的从,比如说做有稍项目什么的,毕竟学校的理论课太枯燥了,还是写代码来得爽快。
  于是当当下段悠闲的小日子里,好好地修了一晃GitHub、Git、Python、爬虫、Qt和数据库等知识,在此之外呢开做一些攻上之备选,比如说下定狠心开始坐单词和描写博客。以前认为写博客没啥卵用,现在矫正了转认识,应该还无到底太晚。
  这段时光未曾白了,好歹也写了几篇博客,还开了一个有点类。一直顶转学校那天(10.23),也还在坚持背着单词。病自是意好了,之前的终究误诊。中间过了一个国庆,所以缺课正好三完善共15天。回母校后赶紧填补课补作业,也即没有管博客了,不过坐单词一直坚称着。到今(11.4)为止,作业上得多了,课也终究补偿回了。
  于是自己虽起来迷茫了。之前计划着做和好想做的从,没有别的东西来扰。然而本返回了全校,大三之攻任务为总算比较还,还要考虑明年大四底事体,得想吓和谐如果召开啊……感觉上是上下一心死忙碌的榜样,其实是来点懒了,觉得没那基本上时间,而且为不理解如果举行呀了。
  我们学无非是个常见一准,看正在身边的同桌,整天玩着玩,也不要顾虑以后找工作吧不要担心学习,毕业后将在爸妈的钱就是足够了两辈子了。羡慕的还要也不得不是越来越努力了,只不过是想念指望毕业能检索个好办事而已。回顾当时有限年的高校在,浪费了森日,不过尽管绩点比不过一些同校,但是编程能力到底标准里前亚咔嚓,我自认为编程还是学得慌好之。只不过是新近有些雾里看花了,没有了大一时刻的passion。希望通过回顾一下,能寻找回这之求学热情。

简述

咱项目面临因故到了实时语音功能,在最初语音 SDK
技术选型的下测试了融云、声网和腾讯的 GVoice
。融云和声网我还当我们种蒙应用了,但是效果还不如上荣耀游戏中之实时语音功能,这点儿上好研究了一晃腾讯的
GVoice,终于成并。由于腾讯 GVoice
官网的连接流程并无是深详细,如果只是懂 Unity3D 不懂 Android
基础知识的恋人,可能连过程未会见一帆风顺。我不怕了解一点点 Android
基础,但准和过了一点只坑,下面我便享受一下己当 Android 平台对接 GVoice
的历程。

新上大学

  那时候的自刚好高中毕业,选正规的下即便想着选择个及数学相关的,与生化生无关的,于是有人与自身引进了瞬间处理器专业,当时稍微懂,不过若是跟理化生无关那就哼了,于是便选择了电脑科学及技术标准。
  选了专业后好奇啊,就起上网搜一搜相关的学识。看到那些什么黑客呀、程序员呀、工程师呀等等,就以为挺牛逼的,让这之自身对这专业产生了深切的志趣。等交上了大学,因为c语言课在第二学期,所以率先学期的时段只能听见导论课老师天天说啊GitHub啊、Python啊、大数据啊、云平台云计算啥的,然后逐步的又了解了知乎这个东西,就夺面开拓眼界。从同开始的高中小白,到见识了社会风气之死之大学生。虽然现在这些看起还蛮白痴,但当这吧确实是大幅度的触动。
  正是由这些见闻,让自己再也同不成的指向电脑对和技能专业有崇拜感来(当时还去图书馆看了《黑客和画家》、《浪潮的巅》)。以至于当自己第二学期接触到c语言时,感觉挺贴心,自学两独月拿同学期的科目学完了,然后死一暑假期间读书c++,慢慢知晓了面向对象,暑假以后还要套了点Qt。那段岁月真的是热心十足,废寝忘食的去各大OJ网站上刷题。
  一直顶大二寒假后,回到了全校。这个时刻王者荣耀流行起来了……花了三个月日从青铜小白打及最强上(以前没玩过dota和lol),天天肝到夜晚十二点,最终总算是废弃坑了。相当给自我大二生学期就这么废了(。•́︿•̀。)。等交大二暑假,终于幡然醒悟,开始学Python。

资源准备

进入腾讯GVoice官网下载
GVoice SDK 和 Unity3D Demo。如下图:

王者荣耀 1

末了总

  我毕竟只是是一个老百姓,有时候要无办法控制好,自制力达不顶那些天才、大神那样的水平。不过工作要如召开,不举行啊起突破。给好定个稍目标:在2017.12.31事先再次写十首博客吧(希望能够吃自己坚持读书下)。加油(ง
•̀_•́)ง。

通流程

1. 导入SDK

事先创造一个拖欠的 Unity 项目
GVoiceDemo,按照官网的过渡流程,我们直接拿下载的SDK压缩包解压后将中间的
Plugins 和 Scripts 两单公文夹都拷贝到 Unity 项目蒙。

2. 创建 Jar 包

将Unity项目导出成安卓项目,导出路径选择某个指定的文件夹,我这边当桌面新建了一个于
unity_gvoicedemo 的公文夹,将项目导出到该文件夹着,操作而下图:

王者荣耀 2
导出成功后会生成 GCloudVoice 和 GVoiceDemo 两单公文夹,用 eclipse
将即刻半只类别共导入,如下图

王者荣耀 3

导入成功后,在 UnityPlayerActivity 项目下新建一个 MainActivity
类,继承自 UnityPlayerActivity,详细代码如下:

package com.shehweiwei.gvoicedemo;

import android.os.Bundle;

import com.tencent.gcloud.voice.GCloudVoiceEngine;
// 注意:下面这句代码必须有,如果没有可能会导致闪退
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        GCloudVoiceEngine.getInstance().init(getApplicationContext(), this);
    }
}

只顾:代码中必然要引入com.unity3d.player.UnityPlayerActivity这保险,如果无引入则进入下即闪退,这里是独好坑,我终于才攀登出去。
下一场,选中 MainActivity.java 文件,右键选择 Export -> Java -> JAR
file, 然后点击 Next 按钮, 接下来操作而下图:

王者荣耀 4

末尾,生成一个 GVoiceDemo.jar 文件。

3. 导入外文件

拿下载的 unity_demo.zip 压缩包解压后将内的
unity_demo\Assets\Plugins\Android 目录下的 AndroidManifest.xml 和
android-support-v4.jar 片只公文拷贝到花色的 Plugins\Android
目录下。注意还时有发生个GCloudVoiceDemo.jar
文件我们没有拷贝,这里我们利用及一样步创建的 GVoiceDemo.jar
文件来代替。注意 jar 包中之包名必须同 AndroidManifest.xml 文件与 Unity
编辑器中PlayerSettings的 Bundle Identifier 包名保持一致。所以,要管
AndroidManifest.xml 文件中之 package="com.example.gcloudu3ddemo"
这无异句代码修改成 package="com.shehweiwei.gvoicedemo"

注意:AndroidManifest.xml 文件被的入口 Activity 的名务必跟创的
Jar 包中的新建的 Activity 名字保持一致。这里的入口 Activity 叫
MainActivity,所以 AndroidManifest.xml
文件中之代码为android:name=".MainActivity",当然为可形容成
android:name="com.example.gcloudu3ddemo.MainActivity"

4. 构建Unity场景

这边我因此uGUI搭建了一个简约的界面,有六独按钮分别调用 GVoice SDK 的六个
API ,然后一个 Text 用来显示回调结果。界面效果使下图:
王者荣耀 5
下一场新建一个 GVoiceDemo 的 C# 脚本,脚本代码如下:

using UnityEngine;
using gcloud_voice;
using UnityEngine.UI;
using System;

public class GVoiceDemo : MonoBehaviour
{
    // 用来显示调用API返回的结果
    public Text result;

    private IGCloudVoice m_voiceengine = null;

    // TODO: 这里的appId和appKey使用的是官方提供的测试值,正式项目中可使用申请的值
    private const string appId = "932849489";
    private const string appKey = "d94749efe9fce61333121de84123ef9b";
    // TODO: 这里使用的是测试账号,所以房间名使用默认的100,正式项目中可根据实际情况赋值
    private string roomName = "100";

    void Start()
    {
        if (m_voiceengine == null)
        {
            m_voiceengine = GCloudVoice.GetEngine();
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            string strTime = System.Convert.ToInt64(ts.TotalSeconds).ToString();
            // TODO: 这里用时间模拟了一个openId,在正式项目中应该把这里的strTime换成用户唯一ID
            m_voiceengine.SetAppInfo(appId, appKey, strTime);
            m_voiceengine.Init();

            // 注册SDK常用回调监听
            m_voiceengine.OnJoinRoomComplete += OnJoinRoom;
            m_voiceengine.OnQuitRoomComplete += OnExitRoom;
            m_voiceengine.OnMemberVoice += OnMemberVoice;
        }
    }

    void Update()
    {
        if (m_voiceengine != null)
        {
            // 不断检测GVoice引擎回调
            m_voiceengine.Poll();
        }
    }

    void OnApplicationPause(bool pauseStatus)
    {
        if (m_voiceengine == null)
        {
            return;
        }

        // 应用暂停时GVoice引擎也暂停,应用重新开始时引擎继续
        if (pauseStatus)
        {
            m_voiceengine.Pause();
        }
        else
        {
            m_voiceengine.Resume();
        }
    }

    /// <summary>
    /// 加入房间,BtnJoin按钮点击调用
    /// </summary>
    public void JoinRoom()
    {
        m_voiceengine.SetMode(GCloudVoiceMode.RealTime);
        int ret = m_voiceengine.JoinTeamRoom(roomName, 15000);

        result.text += "\nJoinRoom:" + ret;
    }

    /// <summary>
    /// 退出房间,BtnExit按钮点击调用
    /// </summary>
    public void ExitRoom()
    {
        int ret = m_voiceengine.QuitRoom(roomName, 6000);
        result.text += "\nExitRoom:" + ret;
    }

    /// <summary>
    /// 打开麦克风,BtnOpenMic按钮点击调用
    /// </summary>
    public void OpenMic()
    {
        int ret = m_voiceengine.OpenMic();
        result.text += "\nOpenMic:" + ret;
    }

    /// <summary>
    /// 关闭麦克风,BtnCloseMic按钮点击调用
    /// </summary>
    public void CloseMic()
    {
        int ret = m_voiceengine.CloseMic();
        result.text += "\nCloseMic:" + ret;
    }

    /// <summary>
    /// 打开扬声器,BtnOpenSpeaker按钮点击调用
    /// </summary>
    public void OpenSpeaker()
    {
        int ret = m_voiceengine.OpenSpeaker();
        result.text += "\nOpenSpeaker:" + ret;
    }

    /// <summary>
    /// 关闭扬声器,BtnCloseSpeaker按钮点击调用
    /// </summary>
    public void CloseSpeaker()
    {
        int ret = m_voiceengine.CloseSpeaker();
        result.text += "\nCloseSpeaker:" + ret;
    }

    /// <summary>
    /// 加入房间回调
    /// </summary>
    /// <param name="code"></param>
    /// <param name="roomName"></param>
    /// <param name="memberID"></param>
    private void OnJoinRoom(IGCloudVoice.GCloudVoiceCompleteCode code, string roomName, int memberID)
    {
        result.text += string.Format("\nOnJoinRoom ---> code: {0}, roomName: {1}, memberID: {2}", code, roomName, memberID);
    }

    /// <summary>
    /// 退出房间回调
    /// </summary>
    /// <param name="code"></param>
    /// <param name="roomName"></param>
    /// <param name="memberID"></param>
    private void OnExitRoom(IGCloudVoice.GCloudVoiceCompleteCode code, string roomName, int memberID)
    {
        result.text += string.Format("\nOnExitRoom ---> code: {0}, roomName: {1}, memberID: {2}", code, roomName, memberID);

        m_voiceengine.OnJoinRoomComplete -= OnJoinRoom;
        m_voiceengine.OnQuitRoomComplete -= OnExitRoom;
        m_voiceengine.OnMemberVoice -= OnMemberVoice;
    }

    /// <summary>
    /// 有成员说话时回调
    /// </summary>
    /// <param name="members"></param>
    /// <param name="count"></param>
    private void OnMemberVoice(int[] members, int count)
    {
        result.text += string.Format("\nOnMemberVoice ---> count: {0}, roomName: {1}, memberID: {2}", count);
    }
}

用 GVoiceDemo
脚本上加到Canvas对象上,然后将脚本中对应之章程注册到相应的按钮的OnClick事件及,保存状况,然后运行及手机上,使用简单个手机就是可语音聊天了,效果使下图:

王者荣耀 6

外事项

依地方的流程并了的种类并无能够于PC上运行,如果一旦当PC上运行不报错,可以将下载的
unity_demo.zip 文件解压后的 unity_demo\Assets\Plugins 目录下的 X86 和
x86_64 两单文本夹拷贝到品种之 Plugins
文件夹下,这样PC上运行就无会见报错。因为自这边没有麦克风设备,不知底在PC上能够不能够采用语音聊天,有谱的恋人可以试,有结果了足举报给我,先谢过了!

种类源码

本人将品种的源码托管在了Github上了,
有亟待之对象自取。品种链接点这里


本文作者: Sheh伟伟
正文链接: http://davidsheh.github.io/2017/05/27/Unity3D集成腾讯语音GVoiceSDK/
版权声明: 本博客所有文章除特别声明外,均运用 CC BY-NC-SA
3.0 许可协商。转载请注明出处!

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website