Unity3D集成腾讯语音GVoice SDK

图片 1

交指示:目前意识腾讯GVoice有外一个官网,叫做腾讯游戏服务,经过比发现这网站才是风靡的,下边我介绍的老量是曾经丢之,但不清楚吗底总的网站没有直接链接到新网址而是依然保留了。然而新官网的文档更加详细,SDK也具革新,所以指出错开新官网下载SDK和Demo,接入流程基本无底异常变。

图片 2

简述

大家种遭到因故到了实时语音效率,在首语音 SDK
技术选型的时段测试了融云、声网和腾讯的 GVoice
。融云和声网我皆以我们种蒙应用了,不过效果还不如上荣耀游戏中之实时语音功用,这简单上好探讨了一下腾讯的
GVoice,终于成并。由于腾讯 GVoice
官网的接入流程并无是颇详细,假若只是懂 Unity3D 不懂 Android
基础知识的心上人,可能连过程不会见顺。我就是了然一点点 Android
基础,但仍和过了少数单坑,下边我不怕享受一下自我于 Android 平台对接 GVoice
的经过。

大一的新生们巧初叶还相会积极性地去体育场馆上课,当他俩或者他们熟练老师的点名习惯依然签证到规律,分外有同桌等就相会起先早退或旷课。

资源准备

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

图片 3

GVoice SDK.png

咱俩秉承着定修课选逃、选修课必逃的尺度办事,或者请求室友同学等协理答到应付老师,发展及后来底下,高校出现了同等种植于非常之兼顾:代课(代签)。

连着流程

代课就是你们可帮衬这一个不牵记去教学楼上课的同室等报到签约,各自研究价格付些钱为代课的同学,不上校友都是生钱大方的主儿10长一节课。

1. 导入SDK

预先成立一个拖欠的 Unity 项目
GVoiceDemo,遵照官网的衔接流程,我们直接以下载的SDK压缩包解压后用内部的
Plugins 和 Scripts 两独文本夹都拷贝到 Unity 项目遭到。

夫话题为自身想开,这学期开学的面前一个夜,我大体在对象去游超市买水果之时节,当自家说大二起先上新学科时我备感稍兴奋。

2. 创建 Jar 包

用Unity项目导出成安卓项目,导出路径采纳有指定的文本夹,我此以桌面新建了一个给
unity_gvoicedemo 的文书夹,将项目导出到该文件夹着,操作而下图:

图片 4

Export Project.png

导出成功后会变动 GCloudVoice 和 GVoiceDemo 两独文件夹,用 eclipse
将顿时半个类型联合导入,如下图

图片 5

Import Projects.png

导入成功后,在 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 按钮, 接下来操作而下图:

图片 6

JAR Export.png

最后,生成一个 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 用来呈现回调结果。界面效果使下图:

图片 7

Create UI.png

下一场新建一个 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事件上,保存状况,然后运行到手机及,使用简单独手机就好语音聊天了,效果使下图:

图片 8

App.png

及大学只是更多之人乐于窝在空调房刷着电视机剧玩在国王荣耀,因为人类固有之本能就是存下来追求简单快乐,而高校中任平时成绩占了总成绩基本上大比重。

别事项

按部就班点的流水线并了的型并无克于PC上运行,即便如当PC上运行不报错,可以将下载的
unity_demo.zip 文件解压后底 unity_demo\Assets\Plugins 目录下的 X86 和
x86_64 五只文件夹拷贝到花色的 Plugins
文件夹下,这样PC上运行就未会师报错。因为自己这里没Mike风设备,不知情当PC上能无克应用语音聊天,有极的意中人可试试,有结果了好上报让本人,先谢过了!

诸节课早退逃课的面貌仍特别大,不少人觉得赶去教学楼上课还真的麻烦,对于硕士逃课早退真的凡蛮常见的场景。

系列源码

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


正文作者: Sheh伟伟
本文链接:
http://davidsheh.github.io/2017/05/27/Unity3D集成腾讯语音GVoiceSDK/
版权讲明: 本博客所有著作除特别讲明外,均采纳 CC BY-NC-SA
3.0

许可协商。转载请阐明出处!

每个宿舍两只人就是会产出一半底逃学早退率,她们稍微人会合规避掉选修课帮人家代课,还来若干人干脆留在宿舍睡觉个昏天地暗,醒来后点外卖可以连正在三四龙无出房门,回归至大步不发二帮派未迈的闺房女人。

可天天自习室寓目室都是满额,依然会有很多总人口浸泡在体育场馆看在专业书做在学业,他们正派为在认真看开之长相在闪闪发光。

世家依然盖下脑袋手贴着开眼睛专注地扣押正在前方的书写,时不时用起笔状写停停并且累翻页,还有朋友们捏耳朵轻声说耳鬓厮磨,虐死旁边装傻充愣的单身狗。

再有的奇迹拍在手机划拉几下蛋以又在一旁,有些还塞着动圈耳机单手顶在头看在电脑,还时时大呼吸几声如是抱怨着啊。

当您离眼前的业务感受在周围的声时,会听到很多之纸细细碎碎地读书、双底移动摩擦地板还有空调运转的鸣响。

当今社会我们每个人都来自己的想法,却连无是豪门都发拨云见日的靶子追求,想法易得走难始坚定不移再对,有时候你昨天尚眷恋方坚韧不拔不懈做同样起事情,后天即使沉浸在管管地追剧娱乐中。

当您坚持不渝的早晚会有人鼓励一下而,当你成之时光会生出成千上万口复杂地恭贺你,而而想只要丢弃的上安静得及平日没什么两种,你的良心就不再爆发翻腾倒海的复杂感。

前几天自己依旧未可知定地答应大学要要开什么样工作,学阿拉伯语没道呢连续学、扩张人脉性格内向也欠突破自己、实习家教实力不够啊早点积攒经验。

每个人且来他们协调的选,选拔了啦条路别后悔走下来就对了。

最后吃你们只答案吧,逃课吧!!!

可是自己并无是砥砺你们逃课呦,假诺你们其实看不惯到无法耐受的品位,逃课的是起轻松的事情。

当您逃课后套其余东西如故窝在宿舍看视频,关键是公挑选随机状态后底行与坚持不渝,因为随便的对峙面是收,自控的人生才越随意。

相关文章

发表评论

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

*
*
Website