游戏已经不单单是一种娱乐方式。
关注【融云全球互联网通信云】了解更多

作为离元宇宙最近的赛道,游戏不仅是各种沉浸式体验类技术落地融合的首发场景,也是创作者经济爆发的热土。

移动游戏在人们的线上消费方面势头强劲,根据 data.ai 的《2022 年移动游戏报告》,2021 年移动游戏用户支出达到了 1,160 亿美元,并保持相当的增速。2022 年第一季度约为 220 亿美元,相较 2020 年第一季度增长了 42%。

(移动游戏用户支出持续增长)

与消费者趋势相吻合,游戏下载量稳居第一,其中,休闲游戏的表现尤为惊人,游戏玩家下载休闲游戏的数量是 2018 年的 5.5 倍左右。

游戏产品在细分品类上愈加多元化发展,创新型玩法与垂直赛道的机会开始增多。而 Unity 是游戏开发者无法绕开的入局钥匙。

游戏和社交深度融合发展的当下,游戏社交化作为提高游戏粘性、提升用户留存的重要手段被广泛应用于所有游戏类别中。

近日,融云 Unity SDK5.1 正式发布,专注游戏场景,方便开发者快速在游戏中接入即时通讯和实时音视频功能。

融云 Unity SDK介绍及适用范围

融云 Unity SDK 特点:
① 跨平台,一次编写多平台运行。节省人力成本,便于维护。

② 支持 Raw Image 和 MeshRender 渲染方式,可以自由选择在 UGUI 或任意 3D 场景中进行视频渲染。

③ 简单清晰的接口设计,30 秒即可快速接入,接入代码不超过 15 行。

④ 版本兼容性强,支持绝大部分 Unity 版本。

⑤ 多场景支持,基于个性化的场景,选择适用的 SDK,音视频、纯音频 SDK 任你选择。

适用游戏及其特点:

麻将、五子棋、跳棋、斗兽棋等几乎所有棋牌类游戏,一站到底、桌球、连连看等几乎所有休闲益智类游戏,均可通过接入融云 SDK 获得通信能力加持,为玩家提供高质量、低延迟的交互体验。它们在通信方面的场景特点为:

① 游戏时只有一个 RTC 房间,所有人员都在同一个房间内;

② 玩家默认都订阅其他人的音频;

③ 玩家不能控制其他玩家的麦克风开关,只能关闭自己的麦克风;

④ 玩家可以选择性收听某些玩家的音频,对于不友善的音频可以选择针对性屏蔽。

游戏中的通信方式:

① IM:单聊、聊天室;文字消息、表情、emoji 等。在游戏过程中的发送消息逻辑为:

  • 匹配到对手之后,将本方玩家和对方玩家都加入到同一个聊天室内;
  • 游戏中,聊天室处于保活状态,游戏结束后将本方玩家和对方玩家都踢出房间,且销毁房间(若直接再来一局则不算游戏结束)。

② RTC:1V1 语音;随机匹配,邀请好友等。游戏过程中的语音逻辑为:

  • 匹配到对手后,将本方玩家和对方玩家加入同⼀个 RTC 房间,默认打开麦克风和听筒/扬声器;
  • 本方玩家可以关闭自己的⻨克风,对方将听不到本方发言;
  • 本方玩家可以关闭自己的听筒/扬声器,自己将听不到对方的发言;
  • 游戏结束后,默认通话结束,将本方玩家和对方玩家都踢出房间,且销毁房间(若直接再来一局则不算游戏结束)。

融云 Unity SDK接入方式及相关接口

融云 Unity SDK 接入方式:

① 直接集成融云的 Unity RTCLib SDK、 Unity IMLib SDK到游戏项目中,Android 和 iOS 可以直接调用 SDK 封装的 Unity 的接口实现游戏内消息、语音需求;

② 分别集成融云的 iOS 端和 Android 端的原生IMLib SDK、 RTCLib SDK,在实现游戏内消息、语音时,iOS 端和 Android 端需要分别调用各自的 IMLib SDK、RTCLib SDK 接口来实现。

涉及接口:

① 创建聊天室

如果聊天室未创建,SDK 会创建聊天室并加入,如果已创建,则直接加入。

// 创建聊天室
String chatRoomId = "聊天室 ID";
int defMessageCount = 50;
RCIMClient.Instance.JoinChatRoom(chatRoomId, (RCErrorCode code) => {
    // code : 错误码
}, defMessageCount);

② 加入已创建的聊天室

// 加入聊天室
String chatroomId = "聊天室 ID";
int defMessageCount = 50;
RCIMClient.Instance.JoinExistChatRoom(chatroomId, (RCErrorCode code) => {
    // code : 错误码
}, defMessageCount);

③ 获取聊天室历史消息

// 获取聊天室历史消息
var conversationType = RCConversationType.ChatRoom;
int lastMessageId = -1;
final int count = 10;
final String targetId = "聊天室 ID";
final long recordTime = 0;
// 首先加载本地聊天室消息
var localMsgList = await RCIMClient.Instance.GetHistoryMessages(conversationType, targetId, lastMessageId, count);
if (localMsgList != null) {
    // 展示本地聊天室消息
    recordTime = localMsgList.Last().SentTime;
}
// 本地消息加载完毕,再获取远端服务器消息
RCIMClient.Instance.GetChatRoomHistoryMessages(targetId, recordTime, count, true,
    (code, chatRoomHistoryMessages) => {
    // code: 状态码,0 成功
    // chatRoomHistoryMessages: 聊天室远端历史消息
});

④ 获取聊天室属性

// 获取聊天室属性
String chatRoomId = "聊天室 ID";
RCIMClient.Instance.GetChatRoomAllEntries(chatRoomId, 
    (RCErrorCode code, IDictionary<String, String> entries) {
    // entries: 聊天室属性
    // code: 状态码,0 成功
});

⑤ 设置聊天室属性

// 设置聊天室属性
String chatRoomId = "聊天室 ID";
String key = "name";
String value = "融融";
bool sendNotification = true;
bool isAutoDel = false;
String notificationExtra = "通知消息扩展";
RCIMClient.Instance.ForceSetChatRoomEntry(chatRoomId, key, value, sendNotification, isAutoDel, notificationExtra, (code) => {
    // code: 状态码,0 成功
});

⑥ 删除聊天室属性

// 订阅⽤户 
int Subscribe(String userId, RCRTCMediaType type); 
int Subscribe(IList<String> userIds, RCRTCMediaType type);

⑦ 退出聊天室属性

// 退出聊天室
String chatroomId = "聊天室 ID";
RCIMClient.Instance.QuitChatRoom(chatroomId, (RCErrorCode code) => {
    // code: 错误码
});

加入房间

// 加⼊RTC房间 
RCRTCRoomSetup setup = RCRTCRoomSetup.Builder.Create().WithRole(RCRTCRole.LIVE_BROADCASTER).Build(); 
Engine.JoinRoom(RoomId, setup);

⑨ 麦克风控制
主播可以在房间内打开或关闭本端麦克风

// 是否启⽤⻨克⻛ 
int EnableMicrophone(bool enable);

⑩ 扬声器控制
主播可以在房间切换声音的播放设置,扬声器或听筒。接入外设时调用此方法,如蓝牙音箱等返回 -1。

// 是否启⽤扬声器 
int EnableSpeaker(bool enable);

⑪ 发布本地音频
加入 RTC 房间成功后,发布本地音频

Engine.Publish(RCRTCMediaType.AUDIO);

⑫ 取消发布本地音频

Engine.Unpublish(RCRTCMediaType.AUDIO);

⑬ 订阅用户

// 订阅⽤户 
int Subscribe(String userId, RCRTCMediaType type); 
int Subscribe(IList<String> userIds, RCRTCMediaType type);

⑭ 取消订阅用户

// 取消订阅⽤户 
int Unsubscribe(String userId, RCRTCMediaType type); 
int Unsubscribe(IList<String> userIds, RCRTCMediaType type);

⑮ 离开房间

Engine.LeaveRoom();

融云RongCloud
82 声望1.2k 粉丝

因为专注,所以专业