ET|09 Scene层级关系
观察Fiber的源码,可以发现Scene和Fiber是强关联的
public class Fiber: IDisposable
{
...
public Scene Root { get; }
...
internal Fiber(int id, int zone, SceneType sceneType, string name)
{
...
this.Root = new Scene(this, id, 1, sceneType, name);
}
每一个Fiber都会关联唯一一个Scene,在构造函数里生成,同样的,每一个Scene也能找她属于的那个Fiber
客户端
对于客户端而言,一般有如下层级关系
我们有2个Fiber,Main一般关联游戏业务逻辑,Net则专注于网络数据的收发
Main会直接关联一个Scene,这个Scene对于业务逻辑而言一般是全局存在的,比如任务组件,玩家属性组件等等
而MainScene有一个组价会比较特殊,CurrentSceneComponent
这个组件本质上也是一个Scene,可以说是一个子场景,功能上与MainScene是一致的,但是子场景一般不会是全局场景,比如进入了某个副本,你就可以挂载一个子场景,当副本结束时,属于子Scene的所有组件都会被释放
所以EntityHelper里有一些接口需要额外注意一下
// 返回层级结构中离Entity最近的Scene
public static Scene Scene(this Entity entity)
{
return entity.IScene as Scene;
}
// 返回层级结构中的根Scene
public static Scene Root(this Entity entity)
{
return entity.IScene.Fiber.Root;
}
服务端
大多数时候服务端的层级会比客户端浅,但是宽度更大,意思就是服务器不会有很复杂的层级树,但对于不同的业务,很可能会区分很多的Fiber来处理
比如登录需要一个Fiber,网关也需要一个Fiber,等等…