Fantasy学习笔记--入门视频

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


Fantasy学习笔记--入门视频
https://www.liu2dream.fun/post/Fantasy学习笔记--入门视频/
作者
刘老师 MrLiu
发布于
2025年1月9日
许可协议