Untuk mengintegrasikan Multiplayer Unity Layanan menggunakan Jaringan API Tingkat Tinggi, Anda harus menggunakan kelas NetworkMatch langsung di scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary Anda. Untuk menggunakannya, Anda harus memanggil fungsi di NetworkMatch
secara manual dan menangani panggilan sendiri.
Di bawah ini adalah contoh bagaimana Anda dapat membuat pertandingan, daftar pertandingan, dan bergabung dengan pertandingan hanya menggunakan kelas NetworkMatch, NetworkServer dan NetworkClient.
Script ini mengatur pencocokan untuk menunjuk ke server pencocokan Unity publik. Ini memanggil fungsi NetworkMatch
untuk membuat, mendaftar, dan bergabung dengan:
Secara internal, NetworkMatch
menggunakan layanan web untuk membuat pertandingan, dan fungsi callback yang diberikan diinvoked ketika proses selesai, seperti OnMatchCreate
untuk penciptaan pertandingan.
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!");
}
}