HMS Nearby Service是HMS Core的一个重要特性,基于Wi-Fi/蓝牙底层技术,帮助游戏玩家快速发现周边的人,并在设备间自动创建低延时、高可靠、零流量的数据传输通道,提高游戏体验。java
现有的本地联机方案须要用户接入同一个路由器,若无路由器则需用户手动创建热点,操做繁琐。Nearby Service能够实现一键本地联机而无需借助路由器。android
Nearby Service能够帮助您实现面对面组队/加好友,无需依赖社交软件,无需GPS,让玩家便捷的与身边的朋友一块儿“开黑”。git
Nearby Service能够帮助您的游戏快速实现面对面道具分享,让玩家便捷的分享游戏道具给现实的朋友,这能够帮助您的游戏拉新促活,增长用户粘性。github
这里为你们带来两个已经封装好的插件,您能够在应用中直接使用这两个插件;也能够查看插件源码了解如何集成Nearby Service。网络
Unity开发环境dom
在Unity工具菜单上依次打开"Assets"--> "Import Package" --> "Custom Package",选择插件:Nearby Player/Discovery Pluginide
3.一、Nearby Player Plugin函数
Nearby Player Plugin适用于面对面组队/加好友/分享等场景。插件中声明NearbyManager类,该类提供两个方法startDiscovery()和SendMessage()用于发现周边的玩家和发送消息。工具
void Start() { AndroidMyCallback cb = new AndroidMyCallback(this); nm = new NearbyManager(cb); nm.startDiscovery(randomName()); }
// 在发现一名玩家以后,如何处理。在本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.二、Nearby Discovery Plugin
Nearby Discovery Plugin基于Unity UNET组件开发的插件,使用该插件能够不须要用户链接同一个Wi-Fi便可完成组网。插件中声明NearbyManager类,该类提供了两个方法startBroadcast()和startDiscovery()。在实际游戏场景中,在两个游戏设备中分别调用这两个接口即可以完成组网。ui
private void OnClick() { Button btn = this.GetComponent<Button>(); btn.enabled = false; AndroidMyCallback androidMyCallback = new AndroidMyCallback(mNetworkManager); NearbyManager nearbyManager = new NearbyManager(androidMyCallback); nearbyManager.startBroadcast(); }
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(); } }
为便于您更好的了解如何使用插件,这里为您带来两个集成了上述插件的示例应用以便您参考。
Nearby-Player-Demo
Tic Tac Toe是一款基于Nearby原生安卓接口开发的本地联机对战游戏,集成Nearby Service以后能够实现无网络场景下的联机游戏,目前已上架华为应用市场。
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
原文连接:
https://developer.huawei.com/consumer/cn/forum/topic/0201395195892590034?fid=18做者:timer