准备设置

打开项目后,进入Window/Services视图。

创建或登录项目ID进入下面面板。

选择Multiplayer进入

选择GoToDashboard进入网页(登录Unity账号)

选择下方OK,进入

括号中填入每个房间最多玩家数量后,选择Save。

进入此界面即可。

项目制作

这里使用Unity Unet(三)Unet局域网游戏框架中项目。

将项目中Network的Maximum Match Size改为上面设置的数量。

创建按钮

代码调整:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Networking.Match;
using UnityEngine.SceneManagement;public class NetworkManagerCustom : NetworkManager
{public static void LanGame(){singleton.StartCoroutine((singleton as NetworkManagerCustom).DiscoveryNetwork());//singleton单例}public IEnumerator DiscoveryNetwork(){NetworkDiscoveryCustom discovery = GetComponent<NetworkDiscoveryCustom>();//获取组件discovery.Initialize();//组件初始化discovery.StartAsClient();//作为客户端运行,扫描局域网的服务器,如果有就加入(自动调用NetworkDiscoveryCustom中的OnReceivedBroadcast)。yield return new WaitForSeconds(2);//等待2秒if (discovery.running)//2秒后仍未找到服务器…{discovery.StopBroadcast();//停止广播包yield return new WaitForSeconds(0.5f);//等待0.5秒discovery.StartAsServer();//作为服务器,发射广播包。StartHost();//作为服务器和客户端同时启动}}public static void NetGame(){singleton.StartMatchMaker();//启用Unet网络对战功能//参考文档:https://docs.unity3d.com/ScriptReference/Networking.Match.NetworkMatch.ListMatches.html//无力解释,下面为百度翻译直译//参数一:startPageNumber:要在返回结果中列出的当前页。//参数二:resultPageSize:请求的页面大小。这决定了在回调中传递的匹配列表中包含的最大匹配数。//参数三:matchNameFilter:文本字符串名称筛选器。这是针对当前活动的匹配名称的部分通配符搜索,可以认为是与*<matchNameFilter>*匹配等价,其中包含此处提供的整个字符串的任何结果都将位于结果集中。//参数四:filterOutPrivateMatchesFromResults:指示响应是否应包含私有匹配项(即受密码保护的匹配项)的布尔值。//参数五:eloScoreTarget:要分组的匹配列表结果的Elo分数目标。如果使用,则应将其设置为列出匹配项的客户端的Elo级别,以便结果更接近该玩家的技能级别。如果不使用,则可以将其与NetworkMatch.CreateMatch或NetworkMatch.JoinMatch等函数中的所有其他Elo引用一起设置为0。//参数六:requestDomain:此请求的请求域。只有同一域中的请求才能相互连接。例如,如果使用域1生成NetworkMatch.CreateMatch,则只有同时指定域1的ListMatches才会找到该匹配项。使用此值可以隔离不同(可能不兼容)的客户端版本。//参数七:callback:此次请求完成后的回调。singleton.matchMaker.ListMatches(0,20,"",false,0,0,singleton.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);}}//列表数量:为0则创建服务器,不为0则加入服务器if (availableMatches.Count == 0){//创建服务器CreateMatch();}else{//加入服务器matchMaker.JoinMatch(availableMatches[UnityEngine.Random.Range(0,availableMatches.Count-1)].networkId,"","","",0,0,OnMatchJoined);}}}//Unet创建网络服务器void CreateMatch(){//参数一:matchName:房间名称//参数二:matchSize:房间最大玩家数量。如填入matchSize,自动获取物体Network的Maximum Match Size的值//参数三:matchAdvertise://参数四:matchPassword:口令/密码//参数五:publicClientAddress:链接地址(公网)//参数六:privateClientAddress:私网地址//参数七:eloScoreForMatch//参数八:requestDomain:域,填入值与上面singleton.matchMaker.ListMatches参数六:requestDomain相同//参数九:callbackmatchMaker.CreateMatch("",matchSize,true,"","","",0,0,OnMatchCreate);}public override void OnMatchCreate(bool success, string extendedInfo, MatchInfo matchInfo){if (!success) return;StartHost(matchInfo);//利用Unet返回的matchinfo创建服务器}public override void OnMatchJoined(bool success, string extendedInfo, MatchInfo matchInfo){if (!success){int currentScene = SceneManager.GetActiveScene().buildIndex;SceneManager.LoadScene(currentScene);return;}StartClient(matchInfo);//利用Unet传回的matchinfo启动客户端}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class IndexUI : MonoBehaviour
{public void NetButtonClick(){NetworkManagerCustom.NetGame();}public void LanButtonClick(){NetworkManagerCustom.LanGame();}
}

将NetButtonClick函数绑定在按钮上。

Unity Unet(四)多人在线游戏框架相关推荐

  1. Flash 多人在线游戏教程 - TicTacToe

    这个教程教您如何开始制作 自己的多人在线flash游戏! 本教程是基于一款经典的回合制游戏Tic-Tac-Toe . 开发环境需求 • Windows 操作系统 • JRE • Flash / Fle ...

  2. Netty实现多人在线游戏后台程序

    一.游戏介绍 这是一款多人在线游戏,其主要功能有: 1)玩家上线: 2)玩家移动: 3)世界聊天: 4)玩家下线: 二.AOI算法 2.1 AOI 介绍 AOI(Area Of Interest),即 ...

  3. 多人在线游戏技术难点分析

    本文主要聚焦于多人在线游戏的三个技术难点: 1.通信架构的选择 2.服务器的承载能力 3.玩家体验 通信架构的选择 同步方式和异步方式 同步: 同步简单粗暴,数据稳定性高,但需要收集到所有玩家数据后才 ...

  4. 利用第三方工具在Unity中创建多人联网游戏

    通常而言,对于不少开发人员而言,开发一款多人在线游戏通常是一件麻烦事,复杂的测试,繁琐的调试过程,还会时不时会出现一些几乎无法复现的BUG.另外,更让人抓狂的是,即便你的代码都能正常工作,但依旧有可能 ...

  5. 快节奏多人在线游戏网络入门系列教程(2):客户端预测与服务器协调

    简介 在上一篇文章中,我们简单介绍了权威服务器的体系.客户端发送交互信息给服务器,服务器周期性的更新游戏状态,然后返回游戏状态给客户端. 这个简单体系会导致用户发送命令时和屏幕渲染响应之间的延迟.产生 ...

  6. 多人在线游戏开发 Unity3D 序言

    序言 这本书打算给你以步骤的方式,通过概念和使用unity游戏引擎使用中间插件创建多人游戏.我一直是一个痴迷于多人游戏的的粉丝.他们有方法轻触我们最基本的欲望,如充满了竞争,合作,以及和我们周围的人类 ...

  7. 利用联网工具Matchvs在Unity中创建多人联网游戏

    通常而言,对于不少开发人员而言,开发一款多人在线游戏通常是一件麻烦事,复杂的测试,繁琐的调试过程,还会时不时会出现一些几乎无法复现的BUG.另外,更让人抓狂的是,即便你的代码都能正常工作,但依旧有可能 ...

  8. 大型多人在线游戏开发

    http://book.csdn.net/bookfiles/329/index.html 书名:大型多人在线游戏开发 作者:(美)亚历山大 编,史晓明 译 来源:人民邮电出版社 出版时间:2006年 ...

  9. BigWorld Pty. Ltd.是一家全球领先的大型多人在线游戏(MMOG)开发解决方案供应商...

    BigWorld Pty. Ltd.是一家全球领先的大型多人在线游戏(MMOG)开发解决方案供应商.其开发套件为网络游戏提供了一整套解决方案,可大幅度提高游戏产品质量,并使用户大大降低游戏开发成本,从 ...

最新文章

  1. 报名 | 美团是怎样给你推荐外卖的?美团大脑知识图谱详解
  2. silk 编解码_silk音频编解码C++类
  3. 电脑上面玩Android 游戏(.apk文件)
  4. MySQL如何有效的存储IP地址
  5. 分享:一款前端布局工具(alloydesigner)
  6. js对象取值的两种方式及区别
  7. 可重复使用的外科缝合器行业调研报告 - 市场现状分析与发展前景预测
  8. oracle完全删除表空间
  9. Nodejs与Java通用AES加解密
  10. python 服务端渲染_详解React 服务端渲染方案完美的解决方案
  11. 2000款商务通用PPT模板免费下载
  12. sql :统计各个状态总数_博客状态:统计信息和更新
  13. 数据库 实验二 数据库的单表查询和连接查询
  14. 记事本APP之Alpha报告
  15. jQuery幻灯片插件Skippr
  16. 傅里叶描述子、HOG特征描述子原理及matlab代码
  17. 如何打印int整数的32位二进制数(位运算)
  18. Loongson2f_灵珑9S2A_debian5(lenny)更改国内archive软件源并使用源码编译安装bochs-2.6.9
  19. 经典小游戏(密室逃脱全集+答案)
  20. 人人都说的SaaS,你真的了解它吗?

热门文章

  1. iOS___oc app中接入支付宝详细流程
  2. SVD5.S09.05.F00,VIS插装阀
  3. Python中的 print()输出函数
  4. Momentum算法
  5. oracle pq distribute,SQL调优(SQL TUNING)并行查询提示(Hints)之pq_distribute的使用
  6. HTML5+CSS3实战(二)——照片墙效果
  7. label smooth/mixup——深度学习中的一种防止过拟合方法
  8. 从零开始-Exchange和Skype for Business 部署-Exchange 安装
  9. UISearchBar背景色及边框修改
  10. 《全球概览》:嬉皮士生存指南