场景管理

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

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,

精灵设计体系?

时间: 2024-11-03 05:28:45

场景管理的相关文章

转:Ogre的八叉树场景管理器OctreeSceneManager

上面是我绘制的一张图. 关于八叉树场景管理器主要需要关注两个类,其一是松散八叉树的数据结构Ogre::Octree,其二是八叉树场景管理器Ogre::OctreeSceneManager. 下面摘录图片中的文字: 松散八叉树的数据结构. 属性:其中mBox为其包围盒,mHalfSize定义为包围盒大小的一半.mChildren是一个大小为8的静态数组,里面保存了8个Octree指针,由八叉树场景管理器创建,由本类管理.mNodes为挂接到当前八叉树上面的八叉树场景节点,mNumNodes保存了挂

【腾讯GAD暑期训练营游戏程序班】游戏场景管理作业说明文档

场景管理作业说明文档                              用了八叉树的算法,测出三层时最快,区域范围内物体数量为21块,控制台打印出的结果如图所示: 场景物体:游戏中,所有具有空间属性的物体游戏场景:<围棋>二维表<进击的围棋><围棋世界>基于空间分组的场景管理的进一步优化进一步分组四叉树视锥范围剔除非可见区域当前必要场景区域 动态加载谷歌 可感知即存在 不可感知即不存在 场景加载

CoronaSDK场景管理库:Composer library (上)

Composer是corona官方提供的场景创建和管理系统,我大CoronaSDK果然威武! 1 场景者,何也 corona中的每个场景是以一个lua文件的形式出现,多个.lua文件分散在你的项目中组成众多场景.你编写这些lua文件的时候必须遵循一些规则,以便Composer可以正确理解你的场景代码. 场景代码文件中须得包含两样东西,以使得场景可以被正确地初始化: 四个监听函数来处理Composer生成的场景事件 四行监听函数声明以及把场景对象返回的语句 具体的例子呆会可以看后面的场景模版. 因

转:场景管理

一.场景管理有很多种方法,如四叉树.八叉树.BSP.模糊K-D树.包围球层次结构等.室内环境主要是BSP为主,从quake3一直延续到现在主流的引擎都是以BSP为基础,BSP使用并不难,关键是数据的生成,这就牵涉到场景编辑器. Quake3.Unreal:BSP,有自己的编辑器. FarCry:场景分为室内和室外两部分,室内场景使用BSP, 室外不清楚但应该跟地形有很大关系,同时为了支持超远距离视距使用了地形Occlusion Culling,另外也可以手动放置OcclusionArea.  

转:OGRE场景管理器介绍

一个场景代表在虚拟世界中显示的物品.场景可以包括静态几何体(比如地形或者室内),模型(比如树.椅子等),光和摄像机.场景有下面种类.室内场景:可能由走廊.有家具的屋子和挂着装饰品的墙组成.室外场景:可能由山,树木,微微摇动的草地,飘着云彩的天空组成.Ogre提供了一套不同的场景管理器,每一种特别支持某种场景,本文档将列出Ogre提供的场景管理器和它们的优缺点. 1 选择一个场景管理器 2 八叉树场景管理器(Octree Scene Manager) 3 地形场景管理器(Terrain Scene

Ogre bsp场景管理笔记

1.用到的知识点 如何判断点在平面哪一边? 以及判断aabb盒子在面的哪一边? Real Plane::getDistance (const Vector3& rkPoint) const { return normal.dotProduct(rkPoint) + d; } //----------------------------------------------------------------------- Plane::Side Plane::getSide (const Vect

转:Ogre源码剖析 - 场景管理之Octree

由于本人的引擎ProjectGaia服务于08年创新杯的游戏项目 – 3D太空游戏,所以理所应当加入Octree(八叉树 – 已经周宁学长发帖介绍过)场景管理器.参考了无数Octree的代码,发现还是我们可爱的Ogre写的最好,于是狂看n千行代码,把精髓提取出来给大家共享. 鉴于我们游戏版教程又n久没有更新了,今天发一篇我对Ogre场景管理器之Octree源代码分析的笔记. 所有代码采用伪代码. 首先回顾一下Ogre场景管理的架构 Ogre以插件形式提供了多种场景管理器 1. BSP管理用于支持

CoronaSDK场景管理库:Composer library (下)

1 覆层场景 composer允许你拥有一个覆层场景.(在任何时刻,只能有一个覆层场景被显示)这是一种特殊的场景,可以加载之后覆盖在活动场景(父场景)之上.一个覆层场景的结构,和其他composer场景并无二致. 1.1 显示一个覆层场景 为了显示一个覆层场景,需要调用函数composer.showOverlay().因为一个覆层场景一般不会覆盖住整个场景,用户可能随时和底下的父场景发生交互.如果你想阻止用户和父场景交互的话,那么可以把option中的isModal参数设置为true.这样做就可

转:场景管理--BSP

对于一个3D引擎来说,最核心的部分应该算是场景组织(scene graph)了,如果这部分你都没有设计好, 那么就别指望开发一个成熟的3D引擎了.为了开发3d引擎,所以我首先就研究这方面的内容,对一个3D的场景来说,又很多的物体,最简单的组织方法就是把他们用一个List连接起来,然后在绘制没一帧的时候依次送入渲染器(render)进行处理. 这显然不是一个很有效的方法,当处理一个普通的游戏场景都会显得非常慢的.实际上虽然一个场景中的物品很多,但是通常可见的指是以小部分,如何能够用很小的计算代价排