- 使用Unity的高级API进行集成
使用Unity的高级API进行集成
要使用Networking High-Level API集成Unity Multiplayer Services ,您必须直接在脚本中使用NetworkMatch类。要使用它,你必须NetworkMatch手动调用函数并自己处理回调。
以下是如何创建匹配项,列出匹配项以及仅使用NetworkMatch,NetworkServer和NetworkClient类加入匹配项的示例。
该脚本将媒人设置为指向公共Unity媒人服务器。它调用NetworkMatch创建,列出和连接匹配的函数:
• CreateMatch创建一个匹配• JoinMatch加入比赛• ListMatch用于列出匹配器服务器上注册的匹配项
在内部,NetworkMatch使用Web服务来建立匹配,并且在过程完成时调用给定的回调函数,例如OnMatchCreate用于创建匹配。
using UnityEngine;using UnityEngine.Networking;using UnityEngine.Networking.Match;using System.Collections.Generic;public class HostGame : MonoBehaviour{List<MatchInfoSnapshot> matchList = new List<MatchInfoSnapshot>();bool matchCreated;NetworkMatch networkMatch;void Awake(){networkMatch = gameObject.AddComponent<NetworkMatch>();}void OnGUI(){// You would normally not join a match you created yourself but this is possible here for demonstration purposes.if (GUILayout.Button("Create Room")){string matchName = "room";uint matchSize = 4;bool matchAdvertise = true;string matchPassword = "";networkMatch.CreateMatch(matchName, matchSize, matchAdvertise, matchPassword, "", "", 0, 0, OnMatchCreate);}if (GUILayout.Button("List rooms")){networkMatch.ListMatches(0, 20, "", true, 0, 0, OnMatchList);}if (matchList.Count > 0){GUILayout.Label("Current rooms");}foreach (var match in matchList){if (GUILayout.Button(match.name)){networkMatch.JoinMatch(match.networkId, "", "", "", 0, 0, OnMatchJoined);}}}public void OnMatchCreate(bool success, string extendedInfo, MatchInfo matchInfo){if (success){Debug.Log("Create match succeeded");matchCreated = true;NetworkServer.Listen(matchInfo, 9000);Utility.SetAccessTokenForNetwork(matchInfo.networkId, matchInfo.accessToken);}else{Debug.LogError("Create match failed: " + extendedInfo);}}public void OnMatchList(bool success, string extendedInfo, List<MatchInfoSnapshot> matches){if (success && matches != null && matches.Count > 0){networkMatch.JoinMatch(matches[0].networkId, "", "", "", 0, 0, OnMatchJoined);}else if (!success){Debug.LogError("List match failed: " + extendedInfo);}}public void OnMatchJoined(bool success, string extendedInfo, MatchInfo matchInfo){if (success){Debug.Log("Join match succeeded");if (matchCreated){Debug.LogWarning("Match already set up, aborting...");return;}Utility.SetAccessTokenForNetwork(matchInfo.networkId, matchInfo.accessToken);NetworkClient myClient = new NetworkClient();myClient.RegisterHandler(MsgType.Connect, OnConnected);myClient.Connect(matchInfo);}else{Debug.LogError("Join match failed " + extendedInfo);}}public void OnConnected(NetworkMessage msg){Debug.Log("Connected!");}}
?
