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