Fantasy学习笔记--入门视频
第二课
1.导入Fantasy.Unity
2.添加预编译(WebGL需要额外加一个预编译)
3.创建入口脚本
4.修改相对路径(mainfest和package-lock.json)
第三课
World类似游戏里区服的概念
Scene类似游戏类某一个功能的服务器
一个World下可以有多个Scene
一个Scene只可以设置一个World
第四课/第五课
1.改了Entry入口脚本,和之前没明显区别,只是增加了代码可读性
2.配置文件目录
3.MachineConfig的地址中OuterIP是外网地址,OuterBindIP是上图查到的地址,InnerIP暂时不需要填
4.WorldConfig填写world名称,连接字符串,数据库名称,数据库类型(目前只有MongoDB)
5.填写ProcessConfig,其中ID不 可重复
ID为(世界ID加1)到(世界ID加255)之间
对外没有监听的话,协议类型和外网端口都不用填
第6课
在server解决方案构建或启动中添加命令行,改变Config/Binary文件夹的位置(下节课会讲导出binary)
开发模式和发布模式命令行
示例运行命令行(发布模式需要pid或g参数才能启动)
其他参数
rider里配置命令行
另一种方法:json项目文件配置命令行参数(有利于git)
第7课
导表导出位置的修改,有需要MemoryPack自行添加
第8课
新建或者导入Fantasy.net项目
复制Config目录到同级目录里
加一个启动项目
创建一个Entity 类库(作为逻辑类)
第8课.Fantasy安装到服务器 P8 - 09:22
添加Entity和Main的引用
第8课.Fantasy安装到服务器 P8 - 11:23 添加引用
导入tool文件夹
配置路径
拷贝这两个Nlog文件到项目的Main文件夹里
设置Nlog文件为一直拷贝到输出文件夹
第8课.Fantasy安装到服务器 P8 - 13:10 tool文件夹导入和配置
配置ProcessConfig(默认)
配置SceneConfig
配置MachineConfig(本机测试默认)
配置WorldConfig(默认)
第8课.Fantasy安装到服务器 P8 - 19:23 配置Excel文件
运行导表工具
第8课.Fantasy安装到服务器 P8 - 25:04 导表
验证Entity项目里有CustomExport文件夹和SceneType类(没有就去导表tool文件夹里配置路径)
在Main添加入口代码,其中可以在
第8课.Fantasy安装到服务器 P8 - 28:21 入口代码
Entity里添加Entry类来方便反射获取其程序集
配置命令行参数
另一种方法(适合git)
第8课.Fantasy安装到服务器 P8 - 31:34 命令行参数
第9课
协议目录
协议通过注释加空格加类型名称来定义的
协议示例(其中第二个里的C2G_TestRequest写错了,应为IRequest)
第10课
session示例
unity里创建测试按钮和脚本
写点击连接session代码,并验证
添加心跳组件
第11课
在OuterMessage.proto文件写测试普通消息协议,用于客户端与服务端之间的协议
导出协议
服务端写接受普通消息方法
第12课
写请求消息协议(RPC消息)
导出协议(同上)
Unity添加按钮和监听
写一个点击发送请求消息的方法(按钮委托可以用 ()=> {}来委托执行异步方法)
服务端写接收请求消息方法
请求消息方法类继承的类是Message加上RPC后缀的类
第13课
(可选)服务端添加开发模式预编译
Unity添加按钮和监听
客户端session断开连接代码
服务端推送普通消息给一个客户端,同时客户端也要写这个普通消息的接收方法
服务端群发和断开消息
第14课
实体演示
创建实体类
第15课
写创建Entity代码
测试Entity相关API(其中Deserialize反序列化方法需要在反序列化类之后执行,否则不能使用该类的API)
第16课
新的安装Fantasy的方法
第17课
Entity内部事件示例
第18课
订阅发送事件
第19课
更新后Fantasy框架删除了Nlog,可以通过NuGet添加Net和Nlog包.
Entity引用Fantasy-Net
Main引用Fantasy-Net.Nlog
服务端program.cs文件添加配表json文件代码和Nlog启动代码
命令行参数删除多余的内容
第20课
单服务器
问题:硬件瓶颈
分布式服务器
问题:切换服务器要断开,不够方便
带路由分布式
问题:路由性能瓶颈,消息过多时,路由处理不过来
主流分布式服务器架构
第21课
第22课
添加一个ChatScene,导表
在InnerMessage.proto文件里编写普通route消息协议,导表
(InnerMessage.proto写用于服务器之间的协议)
编写服务端之间发送内部route消息代码,指定发送给ChatScene
编写G2Chat_HelloRouteMessage接收代码
第23课
在InnerMessage.proto里编写协议代码
写发送内部请求消息代码
编写接收Route消息代码
第24课
添加Route协议定义(如果不用上面的协议就要自己添加)
第25课
添加了OuterMessage协议
用来连接自定义Route协议,客户端用普通的请求接口,服务端用Route请求接口
unity添加两个按钮用于监听
定义Inner协议
写接收客户端发来的请求消息方法,方法里添加发送内部连接请求
编写实体类和接收连接请求方法类,接收过程让Entity的RuntimeID赋给响应里的RouteID,也就是响应消息里发送RuntimeID给中转服务器
第26课
在C2G_ConnectChatRequestHandler.cs里添加Route组件,添加组件之后的Route消息就必须用Route里的Entity
定义普通route消息协议,导表
客户端添加发送route消息
编写接收Route消息代码
第27课
编写协议,导表
客户端发送Route请求消息代码
接收Route请求消息代码
补充连接Route协议,请求时发送GateRouteID
chat发送给客户端普通Route消息的协议
Gate发送链接请求时发送Session的RuntimeID作为GateRouteID
接收时,Entity获取GateRouteID
在客户端发送Route普通消息里,添加一个c发送普通Route消息给客户端的代码用来测试
客户端写接收Route普通消息的代码
第29课
SceneConfig添加Addressable和map的Scene
Outer协议
用来连接Addressable协议,客户端用普通的请求接口,服务端用Route请求接口
Inner协议
接收客户端连接代码,同时发送给map连接请求消息
unity按钮监听
map实体定义,接收连接请求消息,这里map实体要添加AddressableMessageComponent组件,这里的ID怀疑应写RuntimeID
第30课
同理自定义Route
第32课
实体切换服务器(如传送)就要用Addressable组件的锁定功能
unity按钮监听,客户端发送RPC消息代码
写一个AddressableRPC消息,消息里要先锁定AddressableMessage组件,然后发送一个内部请求,将实体发送给切换的map,成功接收到时销毁实体
另一个map接收消息反序列化出来实体并解锁,实现切换map
第33课
自行搭建MongoDB数据库
添加数据库配置,导表
创建一个Address消息来接收进入地图创建实体数据的代码
定义实体,注意ISupportDatabase接口要添加才能序列化到数据库
让MapUser下面挂载刚才创建的实体组件并赋值
查询代码
第34课
任务调度器,FTask方法里的延时执行类
第35课
Ubuntu里部署
安装.Net8
安装MongoDB
配置IP ,其中外网绑定ipconfig里的网卡IP