上图看起来效果和局域网的实现一样,其实已经是在进行网络在线对战了。Bulit出来的程序建了一个网络服务器,然后Unity里面运行程序再加入了服务器。
这个框架已经本实现了在线游戏的功能,怎么实现的呢?
第1步,做以下的设置:
设置Mulitplayer,然后进入网站设置MaxPlayer数量。
第2步,给你写了一个流程图:
也是建立了局域网的NetworkManagerCustom.CS,里面加入了以下的实现代码,在重要的地方我做了一下注释:
public static void NetGame()
{
singleton.StartMatchMaker();
singleton.matchMaker.ListMatches(0, 20, "", false, 0, 0, singleton.OnMatchList);
}
//重写OnMatchList函数
public override void OnMatchList(bool success, string extendedInfo, List<MatchInfoSnapshot> matchList)
{
if (!success)
{
return;
}
if (matchList != null)
{
List<MatchInfoSnapshot> availableMatches = new List<MatchInfoSnapshot>();
foreach (MatchInfoSnapshot match in matchList)
{
if (match.currentSize < match.maxSize)
availableMatches.Add(match);
}
if (availableMatches.Count == 0)
CreateMatch();
else
matchMaker.JoinMatch(availableMatches[UnityEngine.Random.Range(0, availableMatches.Count - 1)].networkId, "", "", "", 0, 0, OnMatchJoined);
}
}
void CreateMatch() //创建Net游戏
{
matchMaker.CreateMatch("", matchSize, true, "", "", "", 0, 0, OnMatchCreate);
}
public override void OnMatchCreate(bool success, string extendedInfo, MatchInfo matchInfo)
{
if (!success)
{
return;
}
StartHost(matchInfo);
}
public override void OnMatchJoined(bool success, string extendedInfo, MatchInfo matchInfo)
{
if (!success)
{
int currentScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene().buildIndex;
UnityEngine.SceneManagement.SceneManager.LoadScene(currentScene);
return;
}
StartClient(matchInfo);
}