UN5L3——协议(消息)生成
UN5L3——协议(消息)生成
协议(消息)生成主要做什么
协议生成 主要是使用配置文件中读取出来的信息,动态的生成对应语言的代码文件
每次添加消息或者数据结构类时,我们不需要再手写代码了
我们不仅可以生成C#脚本文件,还可以根据需求生成别的语言的文件
根据配置生成脚本的文件的主要思路就是,按规则拼接字符串
只要有数据和规则,我们就可以动态的创建脚本文件
制作功能前的准备工作
协议生成是不会在发布后使用的功能,主要是在开发时使用,所以我们在Unity当中可以把它作为一个编辑器功能来做
因此我们可以专门新建一个Editor文件夹(专门放编辑器相关内容,不会发布),在其中放置配置文件、自动生成相关脚本文件
创建一个生成协议(消息)脚本的工具类,并利用[MenuItem()]创建选项
1234567891011121314151617181920212223using UnityEditor;using UnityEngine;public class ProtocolTool{ [MenuItem("ProtocolTool/生成C#脚本")] ...
UN5L2——协议(消息)配置
UN5L2——协议(消息)配置
选择哪种格式配置协议?
利用配置文件配置消息、数据结构、枚举的目的
减少工作量,配置一次,之后自动化生成各种语言对应的类文件
减少沟通成本,避免前后端语言不同时,手动写代码出现前后端不统一的问题
我们可以选择:xml、json、excel、自定义等等
我们可以根据自己的喜好选择选择方便配置的,好用的即可
配置的主要目的是确定类名、成员变量名
之后根据读取的这些配置信息,再通过代码按照规则自动生成对应的类文件
本课使用xml作为协议配置文件,学会xml配置,其它的方式都是大同小异的
我们主要是学习制作思路和流程,以后的项目中,大家根据自己的喜好选择即可
XML相关知识,可以在数据持久化之XML中进行学习
以xml配置为例 —— 制定配置规则
我们主要执行以下步骤:
创建xml配置文件
制定配置规则
首先,XML配置规则需要一个根节点,因此我们将<messages>作为根节点,其中包裹各个枚举、消息类和枚举的声明
123<?xml version="1.0" encoding="UTF-8&qu ...
UN5L1——协议(消息)生成工具
UN5L1——协议(消息)生成工具
协议生成工具
协议生成工具,一般指:消息(协议)生成工具,就是专门用于自动化生成消息的程序,我们之前学习了:
消息的序列化和反序列化
区分消息类型
分包黏包
等等关于消息的相关知识
当需要一个新消息时,我们需要手动的按照规则去声明新的类,这部分工作费时又费力,技术含量也不高
如果前后端是统一的语言,我们按照语法声明一次就行,但是如果前后端语言不统一,比如前端用C#,后端用C++或者Java
那么前后端分开去声明,也容易造成沟通不一致,声明不统一的问题,
所以如果靠我们手动的去声明消息类是一件费时、费力、还容易出问题的事情
所以我们在商业游戏开发时,往往就需要使用协程生成工具,来帮助我们自动化的声明消息类,这样做的好处是:
提升开发效率
降低沟通成本,避免前后端消息不匹配的问题
制作协议生成工具的目的是一劳永逸,它制作完成后
它可以提升开发效率,避免协议不统一等问题,之后多了不同的语言,按照规则进行编写即可
如何制作协议生成工具
要制作工具,首先要确定需求,对于协议生成工具来说,主要需求如下
通过配置文件配置消息或数据类 名字、变量等
工具根 ...
UN5——网络消息处理相关
UN5——网络消息处理相关
本系列学习内容
自定义协议生成工具
如何制作协议(消息)生成工具
协议(消息)配置
协议(消息)生成
第三方协议生成工具Protobuf
Protobuf
配置规则
协议生成
协议使用
Protobuf-Net
其它
大小端模式
消息加密解密
UN4L9——UnityWebRequest高级操作
UN4L9——UnityWebRequest高级操作
本章代码关键字
1234567891011121314151617181920212223242526272829303132//下载请求属性相关new UnityWebRequest() //UnityWebRequest的构造函数,可以在实例化时就指定上传下载地址,请求类型,下载上传处理逻辑unityWebRequest.url //请求地址,从下载服务端哪个数据或者将数据上传到服务端的哪个位置unityWebRequest.method //请求类型,决定UnityWebRequest的操作,Unity内部声明了一系列的常量便于调用请求类型字符串UnityWebRequest.kHttpVerbGET //获取操作命令UnityWebRequest.kHttpVerbPOST //发送 ...
UH3——AB包的上传与下载
UH3——AB包的上传与下载
本课前置知识:C#知识补充(异步执行),文件读写(数据持久化二进制),AssetBundle,网络开发基础,IMGUI,编辑器(可选)
我们已经学习了AB包和一些热更新解决方案,但是还没有真正的体验过AB包热更新替换本地AB包相关的流程
因此我们可以结合之前学习的异步执行,文件读写,网络开发等知识,实现AB包的上传与下载,通过服务器来更新替换客户端要读取的AB包资源,
实现了AB包的上传下载,我们也就可以真正在不升级客户端的情况下,更新美术资源,配置文件,甚至是代码逻辑
本系列学习内容
上传相关
准备AB包资源
获取AB包文件的MD5码
生成AB包资源对比文件
上传AB包和信息文件
下载相关
创建AB包下载管理器脚本
下载资源对比文件
下载AB包
更多功能
资源更新
编辑器功能—设置默认资源
游戏功能—默认资源转存问题
游戏功能—资源更新删除
获取远端对比文件信息
获取本地对比文件信息
下载、更新、删除资源
上传指定资源服务器
编辑器窗口设计
工具窗口逻辑处理
客户端热更新路径优化
AB包的上 ...
UN4L8——UnityWebRequest类
UN4L8——UnityWebRequest类
本章代码关键字
12345678910111213141516171819202122232425262728UnityWebRequest //Unity提供的一个模块化的系统类,用于构成HTTP请求和处理HTTP响应,ftp和本地资源也可以用//创建获取请求相关UnityWebRequest.Get() //获取文本或者二进制数据的网络请求UnityWebRequestTexture.GetTexture() //创建获取纹理的网络请求UnityWebRequestAssetBundle.GetAssetBundle() //创建获取AB包的网络请求//网络请求执行和状态相关unityWebRequest.SendWebRequest() //用于yield return 挂起协程直到请求获取内容下载完毕unityWebRequest.is ...
UN4L7——WWWFrom类
UN4L7——WWWFrom类
WWWFrom
上节课学习了使用WWW类来下载数据,如果想要使用WWW上传数据时,就需要配合WWWFrom类进行使用了
而WWWFrom主要就是用于集成数据的,我们可以设置上传的参数或者2进制数据
当结合WWWFrom上传数据时,它主要用到的请求类型是Post,它使用Http协议进行上传处理
注意:使用WWW结合WWWFrom上传数据一般需要配合后端程序制定上传规则
WWW结合WWWFrom上传数据,需要配合后端服务器来指定上传规则
也就是说我们上传的数据,后端需要知道收到数据后应该如何处理
通过这种方式我们没办法像C#类当中完成文件的上传,但是该方式非常适合用于制作短连接游戏的前端网络层
我们可以对WWW进行二次封装,专门用于上传自定义消息给对应的Web服务器
WWWFrom类的常用方法和变量
该类当中我们主要就使用方法,相关变量很少使用,我们主要就着重讲解方法
WWWForm():构造函数
1WWWForm data = new WWWForm();
AddBinaryData():添加二进制数据
参数一: ...
UN4L6——WWW类
UN4L6——WWW类
本章代码关键字
1234567891011121314WWW //Unity提供给我们简单的访问网页的类,我们可以通过该类下载和上传一些数据new WWW() //WWW的构造函数,用于创建一个WWW请求,传入Http或者ftp地址,或者本地地址(以file://开头)www.GetAudioClip() //从下载数据返回一个音效切片AudioClip对象www.LoadImageIntoTexture() //用下载数据中的图像来替换现有的一个Texture2D对象WWW.LoadFromCacheOrDownload() //从缓存加载AB包对象,如果该包不在缓存则自动下载存储到缓存中,以便以后直接从本地缓存中加载www.assetBundle //如果加载的数据是AB包,可以通过该变量直接获取加载结果www.byt ...
UN4L5——HTTP上传数据
UN4L5——HTTP上传数据
POST必备知识
重点知识点是
Get和Post的区别
ContentType的重要类型
注意:
HTTP通讯中客户端发送给服务端的Get和Post请求都需要服务端和客户端约定一些规则进行处理
比如传递的参数的含义,数据如何处理等等,都是需要前后端程序制定对应规则来进行处理的
只是我们目前没有后端开发的HTTP服务器,所以我们传递过去的参数和数据没有得到对应处理
我们目前只针对HTTP资源服务器上传下载数据进行学习,他们的通讯原理是一致的,都是通过HTTP通讯交换数据
Get和Post的区别
我们上节课学习的下载数据,主要使用的就是Get请求类型,我们在上传数据时将会使用Post请求类型
这两个请求类型他们的主要区别是:
主要用途
Get — 一般从指定的资源请求数据,主要用于获取数据
Post — 一般向指定的资源提交想要被处理的数据,主要用于上传数据
相同点:Get和Post都可以传递一些额外的参数数据给服务端
不同点:
在传递参数时,Post相对Get更加的安全,因为Post看不 ...