教您如何集成Nearby Service提高遊戲體驗,減小開發難度

HMS Nearby Service是HMS Core的一個重要特性,基於Wi-Fi/藍牙底層技術,幫助遊戲玩家快速發現周邊的人,並在設備間自動創建低延時、高可靠、零流量的數據傳輸通道,提高遊戲體驗。java

1、Nearby Service能夠在如下方面爲您的遊戲提供更好的體驗

一、一鍵聯機

現有的本地聯機方案須要用戶接入同一個路由器,若無路由器則需用戶手動創建熱點,操做繁瑣。Nearby Service能夠實現一鍵本地聯機而無需藉助路由器。android

二、面對面組隊/加好友

Nearby Service能夠幫助您實現面對面組隊/加好友,無需依賴社交軟件,無需GPS,讓玩家便捷的與身邊的朋友一塊兒「開黑」。git

三、面對面道具分享

Nearby Service能夠幫助您的遊戲快速實現面對面道具分享,讓玩家便捷的分享遊戲道具給現實的朋友,這能夠幫助您的遊戲拉新促活,增長用戶粘性。github

2、插件介紹

這裏爲你們帶來兩個已經封裝好的插件,您能夠在應用中直接使用這兩個插件;也能夠查看插件源碼瞭解如何集成Nearby Service。網絡

一、開發準備

  • Unity開發環境dom

  • 下載插件:GitHub

二、導入插件

  • 在Unity工具菜單上依次打開"Assets"--> "Import Package" --> "Custom Package",選擇插件:Nearby Player/Discovery Pluginide

  • 等待對包的處理,完成後會列出插件中的資源列表,點擊"Import"

三、關鍵代碼介紹

3.一、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.二、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();
}
  • 回調函數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();
    }
}

四、示例應用

爲便於您更好的瞭解如何使用插件,這裏爲您帶來兩個集成了上述插件的示例應用以便您參考。

  • Nearby-Player-Demo
    在這裏插入圖片描述

  • UNET-NEARBY-DEMO
    在這裏插入圖片描述

4、其餘集成Nearby Service的遊戲應用

  • Tic Tac Toe

Tic Tac Toe是一款基於Nearby原生安卓接口開發的本地聯機對戰遊戲,集成Nearby Service以後能夠實現無網絡場景下的聯機遊戲,目前已上架華爲應用市場。

  • NearbyGameSnake

NearbyGameSnake是一款集成了Nearby Service的多人聯機遊戲,操做界面簡單,玩家無需配置網絡,一鍵便可加入遊戲。

5、更多詳情


原文連接:
https://developer.huawei.com/consumer/cn/forum/topic/0201395195892590034?fid=18做者:timer

相關文章
相關標籤/搜索