Fantasy框架就是组件式开发,通过配置文件设定不同的功能服务器添加不同的组件,从而实现一套代码,部署到所有服务器主机上。
框架核心类:Server
Fantasy程序运行时,会加载Server配置表,根据其中配置的几条数据,创建几个Server实例,每个Server一个进程。
Server实例中会再根据Scene配置表中的几条数据,创建各自的Scene实例。可以在Scene配置表中添加子场景,则每个Server进程下可以创建多个Scene。
框架核心实体:Scene,World
Scene实体
Fantasy中的Scene并不是unity中的那种可视场景,这里指的是一个应用场景概念。
无论你是做游戏开发,还是某种应用开发,服务器上有某种统一的功能模块,这种功能如果有可能:
1、作为独立的功能提供给其它服务器访问,或者供客户端访问,
2、作为独立的功能放在独立的主机上提供访问。
那就应该在Server表中添加这种功能模块的服务进程配置,并在Scene表中添加他的Scene实体配置。
Scene是Fantasy中最特殊重要的实体,他是某种应该场景下,所有相关的实体与组件的管理中心!
为不同的Scene添加不同的组件
在具体的游戏或应用程序中,可以通过监听Fantasy.OnCreateScene事件,为不同应用场景添加不同组件的逻辑。
/// <summary>
/// 当Scene创建时需要干什么
/// </summary>
public class OnCreateScene : AsyncEventSystem<Fantasy.OnCreateScene>
{
public override async FTask Handler(Fantasy.OnCreateScene self)
{
// Fantasy服务器是以Scene为单位的、所以Scene下有什么组件都可以自己添加定义
// OnCreateScene这个事件就是给开发者使用的
// 比如Map下你需要一些自定义组件、你也可以在这里操作
var scene = self.Scene;
switch (scene.SceneType)
{
case SceneType.Addressable:
{
// 挂载管理Address地址组件
scene.AddComponent<AddressableManageComponent>();
break;
}
case SceneType.Gate:
{
break;
}
case SceneType.Map:
{
breake;
}
}
await FTask.CompletedTask;
}
}
World实体
World是一种数据库实体,是在Scene实例中创建的world实例。
可以在Scene配置表中设置WorldId,那这个Scene就会使用此WorldId对应的world实例进行数据库操作。