• 场景管理


    既然提到场景管理,那必须要有世界管理,

    前端的游戏世界管理:

    1.前端游戏状态机

    2.场景管理。执行场景相关的操作。

    精灵对象管理,包括玩家,怪物,其他玩家这些精灵的列表,增删改查,精灵的视野关系管理。这是全局的。

    场景内机关管理,当切换场景的时候,加载对应的机关数据。

    3.用户账户管理。当游戏启动的时候,登录游戏的账户数据信息。

    4.精灵自身功能对象。

    后端的游戏世界WorldService管理:

    1.Entity视野管理。当检测到有新的Entity进入视野后,要通知

    游戏世界,场景模型,Scene管理器之间都是什么关系?

    场景管理模块的职责:

    场景是作为一个模块来看呢,如果作为一个模块,它有MVC这样的划分吗,controller负责加载行为,view负责管理显示对象,scene的显示对象都有什么,场景与地图是什么关系?

    地图数据都有什么

    1.地图名

    2.地图类型?也许用不上,也许可根据地图类型决定一些事情。

    3.地图的进入点。这个进入点,貌似做了不少操作,但为什么原因呢?

    4.地图最多玩家数量

    5.地图的模型列表。这个模型列表是有研究的,这个模型在加载场景的时候会都加载,但为什么这样做呢,也许是可以共存?

    6.相机的颜色,相机的远近裁剪值

    7.地图的宽和高

    8.是否有雾,雾的颜色,雾的参数

    9.环境光配置,颜色等

    10.背景音效

    11.光照贴图资源ID

    12.摄像机有cull layer的概念,可以做裁剪,这个是新概念。*

    13.角色是否开启头灯。这个是跟着地图走的,不同的地图也许需要不同的开关。

    14.机关ID。机关的设计是关卡里很重要的一项,需要单独拿出来研究下。

    那么主角出生在哪个场景呢? 怎么互动的?

    场景管理模块需要同时考虑前台和后台

    1.对于副本来说,服务器在副本第一次被进入的时候,启动副本进程,所有进入此副本的角色,都会由这个副本进程管理,服务器端只有一份场景寻路数据,人和人之间关闭阻挡,但是角色和场景之间的保留,此场景里的机关呢?这样就是说,客户端会有一个副本的演进过程,从玩家进入场景开始,一个个机关结点触发,到玩家出场景,此副本结束。对于服务器来说,一个玩家进入,触发了一个机关,那么这个信息是存储到这个玩家身上的,所以每个副本都会为进来的每个角色分配数据对象。必然会出现多人同时触发一个机关,如果打开效果开关。那么这里的场景管理的就是数据了。

    2.对于开放场景来说,玩家在客户端和服务器都能看到众多的角色,客户端有视锥体裁剪,服务器就没有,但会为每个角色做视野管理,应该是视野范围内,玩家的位置信息会被同步给他视野里的其他对象。

    3.从场景设计角度,前后台如何共享数据?后台必然会有一个EntityInstantiate方法,使用它来实例化一个个Instance对象,但这个其实和场景管理没关系,更多的是对象管理服务。那么Scene的职责和功能是什么?为什么要有场景管理,当然了,场景里有哪些东西,哪些物件,当前这个场景的灯光音乐等。

    从讲故事来说,皮影戏更合适讲C/S模式的架构, 一个副本就是一场演出,美术拼关组出来的场景是舞台,音乐,灯光等的控制也要放到场景调度里,此副本里的精灵怪也是要配置的,机关也要摆放。后台监控整个过程,走到哪一步终止都是由后台决定。

    所以看多了其他游戏的框架,转到这种框架下需要思维上的转变,服务端要连创建都要进行管理。

    不要用客户端的思维去想服务器的逻辑,但是由于现在服务器是跑在Unity环境下,因此可以尝试用客户端的思维想想。从概念上来说,地图和场景的关系?一个地图可以跑一个进程的场景

    分成两层来看,首先,先不走前后台的思想,而是走从上层往下看,意思就是面向接口进行设计。场景都应该有什么,精灵都应该有什么?独立的组件都有什么,这些都是可以考虑的。交互可以不考虑重点在于接口。游戏世界管理,从一个地方派生,例如 Iworld,从意图上看,实现了整个游戏世界里公共的东西。

    场景里会有trigger,玩家碰上这个控制器后,会触发怪物的生成,这应该算是副本里的一种方式。怪物的坐标也需要被编辑出来。

    场景里物件的加载机制,是否要分动态加载和整个加载这两种机制呢?首先肯定会有场景物件列表,如果没有动态加载的话?其实不一定,至少这个机制要支持扩展成动态加载。

    所以Scene是做成module呢还是service ?

    Scene只是一个小功能,这个功能是管理当前场景里静态的,那么动态的呢?里面的怪物的归属关系呢?

    数据只是数据,实例化出来的东西会被动态加载或者卸载,所以放在Scene里是比较合适的。SceneModule和其他module平行,还是个公共service,其它module是否都会用到这个module呢。

    Scene至少要提供各种LoadScene方法,管理场景里的静态物件?

    从设计上来说要支持大型的场景,即能分块加载? 

    再进行一次拆分:

    IAssetService 属于资源加载层面的内容,所有的资源加载都要通过这个接口来进行

    IDataService  属于非显示层面的永久数据文件,即存储在磁盘上的数据,可以认为是被策划编辑出来的数据内容。所有的file都是asset,由IAssetService来加载。

    其中会有MapData,即地图数据,存储有monster列表,NPC列表,出生点位置spawnpoint等。

    IWorldService属于世界管理器,整个程序在运行过程中都会存在的东西,例如当前场景是什么等。

    IEffectService,ISoundService,

    精灵设计体系?

  • 相关阅读:
    django include
    @RequestParam 传值乱码问题
    View Merge 在安全控制上的变化,是 BUG 还是增强 ?
    postMessage实现跨域iframe自适应
    java.lang.IllegalStateException: Service id not legal hostname
    【以前的空间】 单调队列系列
    【以前的空间】 单调队列系列
    【以前的空间】 单调队列系列
    JAVA线程池shutdown和shutdownNow的区别
    JAVA线程池shutdown和shutdownNow的区别
  • 原文地址:https://www.cnblogs.com/designyourdream/p/4546843.html
Copyright © 2020-2023  润新知