教您如何集成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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM