文档导航 Unity C#
本页目录

Talk SDK for Unity3D 使用指南

适用范围

本文档适用于游密实时语音引擎(Talk SDK)Unity3D平台下接入,本页仅说明 Unity C# 接入,其他平台的名称、参数和回调方式请以各自文档为准。

SDK目录概述

Talk SDK提供了以下文件:

  • Plugins库文件,分为Android平台、iOS平台、windows平台、鸿蒙平台。

Plugins/Android: Android AAR包。
Plugins/iOS:iOS平台使用的 xcframework 静态库。

  • VoiceEngine文件夹,内含封装SDK的C#接口文件。

YouMeVoiceAPI.cs:封装了Talk SDK 的全部功能接口。
YouMeConstDefine.cs:包含Talk SDK 错误码等枚举类型定义。

开发环境集成

从Unity3D开发环境集成

  • 解压sdk压缩包。
  • 将解压后的Assets文件夹导入到工程中。
  • 为应用选择要支持的CPU架构: 在Unity3D的Project View中选中Assets/Plugins/Android或者iOS目录下的插件,确保右侧的Inspector View中的Select platforms for plugin下的平台选择正确。

导出Android工程

  • 在File->Build Settings…的Platform列表中选择Android,然后勾选右侧Export Project。

  • 点击右下角Export,选择输出的Android工程路径,导出Android工程。 2.jpg

  • 检查权限配置 Android平台的AAR包已默认包含以下配置,解压AAR包可看到AndroidManifest.xml文件,主工程勿重复添加。

    XML
      <!-- 允许程序访问互联网 -->
      <uses-permission android:name="android.permission.INTERNET" />
      <!-- 允许程序获取 Wi-Fi 状态信息(Wi-Fi 是否启用) -->
      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
      <!-- 允许程序获取网络信息状态(是否连接到网络) -->
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      <!-- 允许程序修改Wi-Fi状态(如开启/关闭Wi-Fi) -->
      <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
      <!-- 允许程序修改网络连接状态 -->
      <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
      <!-- 允许程序写入外部存储(存储 SDK 日志文件) -->
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <!-- 允许程序通过手机或耳机的麦克录制声音 -->
      <uses-permission android:name="android.permission.RECORD_AUDIO" />
      <!-- 允许程序修改声音设置信息,比如:修改通话音量、扬声器/听筒切换 -->
      <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
      <!-- 允许程序连接到蓝牙设备配对,Android 11 (API 30) 及以下 -->
      <uses-permission android:name="android.permission.BLUETOOTH" />
      <!-- 允许程序连接到蓝牙设备配对,Android 12 (API 31) 及以上 -->
      <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

导出iOS工程

  • 在File->Build Settings…的Platform列表中选择iOS,酌情点击Switch Platform按钮。
  • 点击Build Settings->Build,选择输出iOS工程的路径,输入工程名字,导出iOS工程。
  • 在Xcode中打开上一步输出的iOS工程,如采用的是新版本的Unity,则在工程UnityFramework中(非Unity-iPhone)配置Build Phases->Link Binary With Libraries下拉菜单中添加添加框架文件:libc++.tbd、libsqlite3.0.tbd、libz.1.2.5.tbd、libresolv.9.tbd 和 CoreTelephony.framework。
  • 为iOS10以上版本添加录音权限配置 iOS10系统使用录音权限,需要在target的info.plist中新加NSMicrophoneUsageDescription键,值为字符串(授权弹窗出现时提示给用户)。首次录音时会向用户申请权限。配置方式如下: iOS10录音权限配置

API接口调用流程

API调用的基本流程如下图所示,具体接口说明参见API接口手册。

使用 Talk SDK 实现语音通话的基本流程

  1. 在初始化前注册 SetOnEventCallback,或使用 SetCallback 注册 GameObject 消息对象。
  2. 调用 Init,同步返回成功后等待 YOUME_EVENT_INIT_OK;初始化失败或同步返回错误时停止后续流程。
  3. 调用 JoinChannel(userID, channelID, role, bSingleMode, false) 加入频道。bSingleMode 默认是 false,单频道用 true,多频道用 false;使用 YouMeUserRole 枚举传角色。
  4. 收到 YOUME_EVENT_JOIN_OK 后,设置 SetMicrophoneMute(false)、SetSpeakerMute(false)、SetVolume(70)(扬声器音量增益 70%)开始自由通话。听众角色保持关闭麦克风。
  5. 离房调用 LeaveChannel(channelID) 或 LeaveChannelAll(),等待离房事件;应用结束时调用 UnInit。

下面的示例代码演示单频道自由通话。替换 AppKey/AppSecret、用户 ID 和频道 ID,并先配置平台权限。

C#
using UnityEngine;
using YouMe;

public class TalkQuickStart : MonoBehaviour
{
    private YouMeVoiceAPI api;
    private const string UserID = "user1";
    private const string ChannelID = "team1";

    void Start()
    {
        api = YouMeVoiceAPI.GetInstance();
        api.SetOnEventCallback(OnTalkEvent);
        YouMeErrorCode ret = api.Init("YOUR_APP_KEY", "YOUR_APP_SECRET",
            YOUME_RTC_SERVER_REGION.RTC_DEFAULT_SERVER, "");
        CheckAccepted(ret, "初始化");
    }

    void OnTalkEvent(YouMeEvent evt, YouMeErrorCode err, string channel, string param)
    {
        switch (evt)
        {
            case YouMeEvent.YOUME_EVENT_INIT_OK:
                CheckAccepted(api.JoinChannel(UserID, ChannelID,
                    YouMeUserRole.YOUME_USER_TALKER_FREE, true, false), "进房");
                break;
            case YouMeEvent.YOUME_EVENT_JOIN_OK:
                api.SetMicrophoneMute(false);
                api.SetSpeakerMute(false);
                api.SetVolume(70);
                break;
            case YouMeEvent.YOUME_EVENT_INIT_FAILED:
            case YouMeEvent.YOUME_EVENT_JOIN_FAILED:
                Debug.LogError($"通话流程失败:{evt}, {err}");
                break;
            case YouMeEvent.YOUME_EVENT_LEAVED_ONE:
            case YouMeEvent.YOUME_EVENT_LEAVED_ALL:
                Debug.Log("已离开频道");
                break;
        }
    }

    public void LeaveVoice()
    {
        CheckAccepted(api.LeaveChannel(ChannelID), "离房");
    }

    static void CheckAccepted(YouMeErrorCode ret, string operation)
    {
        if (ret != YouMeErrorCode.YOUME_SUCCESS)
            Debug.LogError($"{operation}请求未受理:{ret}");
    }

    void OnApplicationQuit()
    {
        if (api != null) api.UnInit();
    }

    void OnDestroy()
    {
        if (api != null) api.SetOnEventCallback(null);
    }
}

通用事件由 SetOnEventCallback 接收;需要网络检测、成员列表或房间广播时,再按 API 手册分别注册对应的 SetOn*Callback,并在管理对象销毁时传 null 清理。回调在 Unity 主线程派发,可更新 UI;避免在回调中执行耗时操作。