场景数据框架

一、概述 一般MMO的游戏由场景和场景中的对象构成,在设计地图时,就会遇到几个问题。怎么有效直观地配置信息,对象都有什么功能,有什么功能是共有的。针对上面的问题,首先需要解决的是抽象出场景对象结构,在此基础上做编辑器,用图形化的界面展示,修改储存数据,供代码使用。 二、场景对象结构 场景本事有数据,如场景资源,组队人数限制等等,这种信息改动不大,也比较直观,一般只要存在excel里面就好,需要的话可以做图形编辑器对excel进行读写和修改。 场景中的对象可以按需分成几类,常见的有npc,采集物,区域,点等等。 NPC NPC主要承载了显示模型的功能,读取NPC表。 采集物 采集物和NPC差不多,只是对话交互改成了点击采集。 区域 区域分成了圆形区域和多边形区域,划分区域可以实现进入和离开区域的逻辑,比如划分了游泳区,飞行区等,进入以后主角切换运动状态。 点 点的功能比较广泛,主要用于定位,也可以添加触发组件以后实现圆形区域的功能。 组件 组件是对象上的属性和功能,公用的组件有缩放,大小,显示隐藏条件等,特殊的组件有巡逻,交互按钮等,按需添加,从而赋予对象特性。 三、场景编辑器 理清了场景对象的结构以后,就可以做编辑器把数据组织起来了,场景编辑器的实现细节不多说,尽量用起来符合直观操作即可,功能如下。 增删改场景信息 直观展示场景中的对象(位置、模型、范围等) 增删改场景中的对象 修改对象的组件属性 导出程序可用数据 四、数据载体 数据可以直接导出lua,也可以导出成json,xml等,只要方便维护,程序方便调用即可。 目前使用的是先储存到excel,再从excel导出到lua中,供程序调用。 使用excel作为中间载体的原因可能是比较直观,但感觉使用json或者Unity序列化的方法也是可行的。

2022-12-5 · Dand

InstantOC + LOD

原理 剔除遮挡+Lod,可以组合使用 相机每帧主动发射射线击中物体,击中后显示,并且重置周期 物体在周期后,主动向相机发射射线,判断是否需要隐藏 相机后的物体。减少DC(CPU压力),减少GPU剔除消耗;被遮挡的物体减少GPU渲染 IOCCam 每帧根据算法生成的随机点,向视锥体内发射若干条射线,击中以后,显示 并根据距离通过LODGroup切换高低模 参数:每帧发射的射线 不足:射线过多 改进:减少射线,延长周期(物体不主动发起射线) IOClod 初始化,根据相机距离和包围盒,初始化一个合适的Lod 剔除方法:Render enable设置为false或者修改阴影投射(一定距离内保持阴影,防止穿帮) 原版方案:周期从击中点向相机发射射线,被其他阻挡,则剔除 不足:随机的击中点,可能在侧面,或者后面,会自己把自己剔除掉 改进:击中点取2s中最近的击中点,作为击中点 LOD 运行时根据机型信息,设置IOClod的lod距离 cullDis,过远的直接隐藏,方法和上面一致 减少GPU需要处理的顶点数 使用 生成场景时给需要剔除的组件添加IOClod组件 指标 点面数 峰值点面数 优点 剔除不需要渲染的物体 根据距离切换LOD模型,甚至剔除 参考 IOC介绍

2022-11-12 · Dand