1. 程式人生 > 實用技巧 >教您如何整合Nearby Service提升遊戲體驗,減少開發難度

教您如何整合Nearby Service提升遊戲體驗,減少開發難度

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/cn/forum/topic/0201395195892590034?fid=18
作者:timer