HMS Nearby Service 是 HMS Core 的一个重要个性,基于 Wi-Fi/ 蓝牙底层技术,帮忙游戏玩家疾速发现周边的人,并在设施间主动建设低延时、高牢靠、零流量的数据传输通道,晋升游戏体验。
一、Nearby Service 能够在以下方面为您的游戏提供更好的体验
1、一键联机
现有的本地联机计划须要用户接入同一个路由器,若无路由器则需用户手动建设热点,操作繁琐。Nearby Service 能够实现一键本地联机而无需借助路由器。
2、面对面组队 / 加好友
Nearby Service 能够帮忙您实现面对面组队 / 加好友,无需依赖社交软件,无需 GPS,让玩家便捷的与身边的敌人一起“开黑”。
3、面对面道具分享
Nearby Service 能够帮忙您的游戏疾速实现面对面道具分享,让玩家便捷的分享游戏道具给事实的敌人,这能够帮忙您的游戏拉新促活,减少用户粘性。
二、插件介绍
这里为大家带来两个曾经封装好的插件,您能够在利用中间接应用这两个插件;也能够查看插件源码理解如何集成 Nearby Service。
1、开发筹备
- Unity 开发环境
- 下载插件:GitHub
2、导入插件
- 在 Unity 工具菜单上顺次关上 ”Assets”–> “Import Package” –> “Custom Package”,抉择插件:Nearby Player/Discovery Plugin
- 期待对包的解决,实现后会列出插件中的资源列表,点击 ”Import”
3、要害代码介绍
3.1、Nearby Player Plugin
Nearby Player Plugin 实用于面对面组队 / 加好友 / 分享等场景。插件中申明 NearbyManager 类,该类提供两个办法 startDiscovery() 和 SendMessage() 用于发现周边的玩家和发送音讯。
- 在程序启动时调用 startDiscovery 发现四周玩家,同时也会被四周玩家发现。调用接口代码如下:
void Start() {AndroidMyCallback cb = new AndroidMyCallback(this);
nm = new NearbyManager(cb);
nm.startDiscovery(randomName());
}
- 回调函数 AndroidMyCallback 用于定义发现胜利之后须要做的动作。
// 在发现一名玩家之后,如何解决。在本 demo 中咱们将其增加到玩家列表
public override void onFoundPlayer(string endpointName, string endpointId) {mListController.AddPlayerToList(endpointName, endpointId);
}
// 在失落一名玩家后,如何解决。在本 demo 中咱们将其移除玩家列表
public override void onLostPlayer(string endpointId) {mListController.RemovePlayerFromList(endpointId);
}
// 在收到玩家音讯时,如何解决。在本 demo 中咱们只展现音讯内容
public override void onReceiveMsg(string endpointName, string Msg) {mListController.ReceiveMsg(endpointName, Msg);
}
- 发现左近玩家胜利之后,能够向玩家发送组队邀请 / 好友邀请 / 道具分享等音讯。
// 在本 demo 中,咱们点击玩家列表中的某位玩家,即向其发送组队邀请音讯
private void OnClick(string endpointId) {nm.log("OnClick. SendMessage to" + endpointId);
nm.SendMessage(endpointId, "invites you to join a game.");
}
3.2、Nearby Discovery Plugin
Nearby Discovery Plugin 基于 Unity UNET 组件开发的插件,应用该插件能够不须要用户连贯同一个 Wi-Fi 即可实现组网。插件中申明 NearbyManager 类,该类提供了两个办法 startBroadcast() 和 startDiscovery()。在理论游戏场景中,在两个游戏设施中别离调用这两个接口便能够实现组网。
- 调用接口代码示例
private void OnClick() {Button btn = this.GetComponent<Button>();
btn.enabled = false;
AndroidMyCallback androidMyCallback = new AndroidMyCallback(mNetworkManager);
NearbyManager nearbyManager = new NearbyManager(androidMyCallback);
nearbyManager.startBroadcast();}
- 回调函数 AndroidMyCallback 用于组网胜利之后须要做哪些动作,本例中在发现之后调用 UNET 的 networkManager 接口开始游戏
public class AndroidMyCallback : AndroidCallback {
private NetworkManager mNetworkManager;
public AndroidMyCallback(NetworkManager networkManager) : base() {mNetworkManager = networkManager;}
public override void onClientReady(string ipaddr) {
mNetworkManager.networkAddress = ipaddr;
mNetworkManager.StartClient();}
public override void onServerReady(string ipaddr) {mNetworkManager.StartHost();
}
}
4、示例利用
为便于您更好的理解如何应用插件,这里为您带来两个集成了上述插件的示例利用以便您参考。
- Nearby-Player-Demo
- UNET-NEARBY-DEMO
四、其余集成 Nearby Service 的游戏利用
- Tic Tac Toe
Tic Tac Toe 是一款基于 Nearby 原生安卓接口开发的本地联机对战游戏,集成 Nearby Service 之后能够实现无网络场景下的联机游戏,目前已上架华为利用市场。
- NearbyGameSnake
NearbyGameSnake 是一款集成了 Nearby Service 的多人联机游戏,操作界面简略,玩家无需配置网络,一键即可退出游戏。
五、更多详情
- 华为开发者联盟官网:
https://developer.huawei.com/consumer/en/hms/huawei-nearbyservice?ha_source=hms1 - 获取开发领导文档:
https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides-V5/introduction-0000001050040566-V5?ha_source=hms1 - 参加开发者探讨请到 Reddit 社区:https://www.reddit.com/r/HuaweiDevelopers/
- 下载 demo 和示例代码请到 Github:https://github.com/HMS-Core
- 解决集成问题请到 Stack Overflow:
https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest
原文链接:
https://developer.huawei.com/consumer/cn/forum/topic/0201395195892590034?fid=18
作者:timer