UH3L4——上传AB包和信息文件
UH3L4——上传AB包和信息文件
搭建FTP服务器
本次我们使用别人做好的FTP服务器软件来搭建FTP服务器:更多内容请看:UN3L2——搭建FTP服务器
注意:实际开发中,搭建FTP服务器的工作一般由后端程序来完成,不需要我们前端程序来完成
后端程序搭建好后,给你相关的信息,我们访问即可
下载安装Serv-U等FTP服务器软件,在想要作为FTP服务器的电脑上运行即可
(推荐使用同一局域网(路由器或者WIFI)下的第二台设备学习,前提是有)
打开Serv-U,创建域,直接不停下一步即可,加密选择使用单向加密
创建用于上传的FTP账号密码
创建用于下载的FTP匿名账号(用户名:Anonymous,密码:无,设置只读权限)
检查作为服务器设备当前IP地址,在cmd或者powershell里输入ipconfig即可查看,客户端使用该IP地址访问服务器
上传AB包和资源对比文件
前置知识点
C#异步函数
Task任务类
UN3L4——FTP上传文件
上节课生成的AB包资源对比文件
实现流程
使用特性为菜单栏添加一个选项AB包工具/上传AB包和对比文件,从选项里触发该功能Up ...
UH3L3——生成AB包资源对比文件
UH3L3——生成AB包资源对比文件
分析需求
分析存放AB包的文件夹下哪些文件需要生成资源对比文件
需要生成资源对比文件的只有没有后缀的AB包本身,
manifest文件是存储AB包依赖的,一般很少更新改变
meta文件是Unity对存储到Assets文件夹下的文件默认生成的设置配置信息,不需要关注
前置知识点
文件读写操作:DirectoryInfo、Directory、FileInfo
编辑器菜单栏添加按钮:[MenuItem()]
生成流程
在菜单栏添加一个按钮,用于触发该功能
遍历AB包文件夹,获取所有AB包文件消息,例如文件名,文件路径,文件长度,文件后缀名
将AB包的文件名、大小、MD码存入到资源对比文件中,MD码的获取复用上节课实现的代码
(文件名、大小、MD码之间用' '分割,不同AB包资源消息之间用'|'分割)
代码实现
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950using System.IO;us ...
CS3L25——StringBuilder
CS3L25——StringBuilder
本章代码关键字
12345678910stringBuilder.Capacity //获取当前 StringBulider 的容量StringBulider.Length //获取当前 StringBulider 的字符串长度stringBuilder.Append() //追加字符串stringBuilder.AppendFormat() //以格式化方式追加字符串stringBuilder.Insert() //在指定位置插入字符串stringBuilder.Remove() //从指定位置后移除指定数量的字符串stringBuilder.Clear() //清空所有内容stringBuilder[] //通过索引器查找字符或者修改字符stringBuilder.Replace() //将特定字符替换为其他字符StringBuilder.Eq ...
UH3L2——获取AB包文件的MD5码
UH3L2——获取AB包文件的MD5码
本章代码关键字
123456System.Security.Cryptography //安全和加密相关命名空间MD5 //MD5码类MD5CryptoServiceProvider //MD5加密服务提供商类new MD5CryptoServiceProvider() //通过MD5加密服务提供商类的构造函数实例化一个继承MD5类对象的构造方法md5.ComputeHash() //通过文件流获取md5码,返回16个字节的字节数组byte.ToString("x2") //将字节数组转为小写16进制的字符
MD5码
MD5(Message-Digest Algorithm)是MD5信息摘要算法的简称,它是一种广泛使用的密码散列函数
可以生成出一个128位(16个字节)的散列值,用于确保信息的完整一致性
当我们将数据经过MD5算法计算 ...
UH3L1——准备AB包资源
UH3L1——准备AB包资源
导入AssetBundles-Browser-master
关于高版本如何导入,请参考:高版本导入AssetBundles-Browser-master
准备资源
创建ArtRes文件夹,随意创建几个Lua脚本(.lua.txt后缀)和预制体,分别放入到luaAB包和modelAB包内
AB包打包
按照下图设置打包选项,然后打包,这次不需要将其拷贝到StreamingAssets内(除非作为默认的AB包资源)
打包后效果:
UN6L2——实现断线重连
UN6L2——实现断线重连
断线重连
有时我们会因为遇到意外情况而非自愿的断开与服务器的连接(如网络不好等情况)
因此,我们为断开连接的Close方法添加一个参数,用来表示是否是客户端自己断开连接
如果不是,就可以弹出一个界面询问客户是否断线重连
12345678910111213141516171819202122232425public void Close(bool isSelf = false){ if (socket != null) { QuitMessage msg = new QuitMessage(); socket.Send(msg.Writing()); socket.Shutdown(SocketShutdown.Both); socket.Disconnect(false); socket.Close(); socket = null; } //不是自己主动断开连接的 if (!isSelf) { ...
UN6L1——消息池类和消息处理类
UN6L1——消息池类和消息处理类
要解决的问题
在目前的练习题内实现的客户端网络管理器里,我们是将消息的识别,和消息的处理逻辑在网络层实现的
并且用switch...case...来实现消息的识别,缩略代码如下(省略断联、发消息等逻辑):
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113private Queue<BaseMessage> receiveQueue = new Queue<BaseHandler>();//连接服务器的代码public void Connect(string ip, int port){ if (sock ...
UN6——网络开发实践相关
UN6——网络开发实践相关
实践目标
消息池和消息处理类
通过消息池类和消息处理类,优化反序列化和消息处理,消息识别逻辑从网络层逻辑中剥离开来
实现断线重连
为什么要进行这个实践优化
网络通讯模块,往往是游戏开发初期定好规则后,就不会进行过多更改的模块,我们需要将其封装的更加通用、便捷、高效
我们的主要目的是:
自动化的生成、处理消息
将消息逻辑处理剥离到外部
在进行模块化开发时更加的方便其它开发人员工作,让我们把工作重点放到上层逻辑的处理上
UEDL3-8——动画曲线、布局
UEDL3-8——动画曲线、布局
本章代码关键字
12345678EditorGUILayout.CurveField() //动画曲线控件,可以让我们设置动画曲线,需要配套一个AnimationCurve变量AnimationCurve //动画曲线类EditorGUILayout.BeginHorizontal() //水平布局方法,与EndHorizontal()配合使用,包裹需要水平布局的控件EditorGUILayout.EndHorizontal() //与BeginHorizontal()配合使用的方法,其包裹起来的控件是水平布局的EditorGUILayout.BeginVertical() //垂直布局方法,与EndVertical()配合使用,包裹需要垂直布局的控件EditorGUILayout.EndVertical() //与BeginVertical()配合使用的方法,其包裹起来的控件是垂直布局的EditorGUILayout.BeginScrollVi ...
UEDL3-7——帮助框、间隔
UEDL3-7——帮助框、间隔
本章代码关键字
1234567EditorGUILayout.HelpBox() //帮助框控件,该控件可以输出一些提示信息MessageType //消息类型枚举,需要传入到帮助框控件内,表示提示消息的类型MessageType.None //不显示图标MessageType.Info //显示白色感叹号消息图标MessageType.Warning //显示警告图标MessageType.Error //显示错误符号图标EditorGUILayout.Space() //间隔控件,该控件可以让控件隔开一段距离
帮助框控件
该控件可以输出一些提示信息
参数一:输出消息(可选用GUIContent)
参数二:消息类型枚举 MessageType,分四个等级,输出不同图标
参数三:是否以最宽的样式,即顶满窗口的宽显示(默认为ture),如果为false,则会在控件左边会空出一段距离
12345678p ...