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工程。
-
检查权限配置 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键,值为字符串(授权弹窗出现时提示给用户)。首次录音时会向用户申请权限。配置方式如下:
API接口调用流程
API调用的基本流程如下图所示,具体接口说明参见API接口手册。

使用 Talk SDK 实现语音通话的基本流程
- 在初始化前注册
SetOnEventCallback,或使用SetCallback注册 GameObject 消息对象。 - 调用
Init,同步返回成功后等待YOUME_EVENT_INIT_OK;初始化失败或同步返回错误时停止后续流程。 - 调用
JoinChannel(userID, channelID, role, bSingleMode, false)加入频道。bSingleMode默认是 false,单频道用 true,多频道用 false;使用YouMeUserRole枚举传角色。 - 收到
YOUME_EVENT_JOIN_OK后,设置SetMicrophoneMute(false)、SetSpeakerMute(false)、SetVolume(70)(扬声器音量增益 70%)开始自由通话。听众角色保持关闭麦克风。 - 离房调用
LeaveChannel(channelID)或LeaveChannelAll(),等待离房事件;应用结束时调用UnInit。
下面的示例代码演示单频道自由通话。替换 AppKey/AppSecret、用户 ID 和频道 ID,并先配置平台权限。
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;避免在回调中执行耗时操作。
