meta data for this page
📚 开发流程事项及问题解答
本文将为《沙盘引擎》模组的开发者进行前置介绍,建议开发前完整地阅读本文至少一次。
注意:该文档更多适用于作为《沙盘引擎》创意开发的人群,而非普通玩家
📒 引擎分工机制
《沙盘引擎》的纯净工程是一个自由且开放的“纯净世界”。具体世界机制怎样运行完全由开发者来设计与实现。
引擎需要做好功能预制平衡工作 —— 哪些是引擎应该自带的,哪些是开发者应该自行实现的。
对于开发者,在设计之前需清楚,除去引擎自带的功能外,自己还需要做什么。
最终的平衡如下:
内置实现 | 说明 |
---|---|
基础世界观 | 引擎内预设了世界的组成元素,如地形、实体、载具、天气等。 (例如《我的世界》游戏内内可生成的怪物、动物等角色) |
联机功能 | 引擎实现了联机功能,并可被开发者灵活应用;单机与联机共用脚本逻辑 |
沙盘地图 | 通用的地图格式,基于此格式的地图都可被沙盘引擎加载 对于一些特定玩法的模组,自定义几个专用的游戏地图是有必要的 (例如生存游戏,考虑到玩法的体验,比如地图物资刷新点等,应该自定义或修改一个新的专用地图) |
UI系统 | 沙盘引擎支持FairyGUI导入及脚本编辑使用 2D、3D或者玩家头顶的UI,均可用所见即所得的界面工具配合脚本快速成型Demo |
模型系统 | 体现于一切与【模型】有关的内容 例如角色的头、载具的车身车轮、物品系统的模型,都基于模型库(例如ID XXX = 某个东西) 沙盘引擎也支持外部导入gltf格式的通用模型 |
角色系统 | 角色为引擎内任何可见的生物(如人类、僵尸、怪物、动物等) 样式不同,但通用一套逻辑:例如执行事件或者AI寻路,都可通过API统一调用 |
载具系统 | 载具为引擎内任何可乘坐载具(如自行车、摩托、汽车、船、飞机、直升飞机) 编写一个json文件即可导入一辆载具;一辆车甚至可以无限地放置轮子、灯光等组件 也就是说,载具只是一类指定模型装载了组件的可载人物理刚体, 沙盘引擎中预设了多类载具,拥有不同操作方式和AI算法,可以用于快速建立一个有趣的Demo |
物品系统 | 物品表示引擎内角色可操作使用的任何物品(如水瓶、工具、枪类、武器等) 基于【已导入模型】进行扩展的物品导入是引擎支持的,只需要绑定一个 模型+Json 就可以导入一个物品它们只是一些抽象的通用数据,可以很简单地为它们设定伤害、动作等属性配置 大部分物品没有内置功能,这个物品具体怎样使用,取决于脚本开发者的设计与实现 (也许增加了开发难度,但可以让开发者实现更多自己的想法) (举例:一个修车的工具,一开始他只是一个扳手样式的物品,除了拥有“能挥动攻击”这种引擎内置的基础设定外,没有任何其他的功能;开发者可以设计为,通过判断焦点或距离的方式,选择是【使用】修复还是【按键】修复) |
火车系统 | 地图支持解析有关火车轨道及火车(抽象概念)的导入 火车轨道是编辑器内置的功能,负责记录并渲染火车轨道路径 火车是一个抽象概念,任何模型都可通过此系统被设定为一个“火车物体”,拥有火车的属性 |
拾取物系统 | 拾取物相当于一个简易的触发点,是一个默认可交互的“检查点”(可参考GTA3系列的武器图标) 拥有多个形态,如默认模型、光圈等方式,可以帮助开发者实现丢下、放置、拾取物品等功能 |
检查点系统 | 检查点表示一个圆形半径的范围检查点,当角色进入到范围内,会触发指定的事件(和拾取物类似,但范围更大) 拥有多个形态,如完全透明、半透明光圈等方式,可以帮助开发者实现范围表示、范围触发检测等功能 此系统可参考GTA3系列的赛车检查点 |
故事系统 | 内置的故事剧情系统,可通过墨水语言等方式编写一个可被引擎识别的故事事件 同时引擎自带了可扩展的对话框和相关脚本事件,可以实现大多数类型的故事交互 |
声音管理 | 引擎支持导入外部常见格式(mp3\ogg)的音频文件,并在引擎内通过API简单使用 除了常规的播放音频外,还内置了播放音乐、环境声音,以及切换过渡的效果API |
视频管理 | 引擎允许导入外部视频文件,并作为RendererTexture 的格式进行渲染例如渲染到指定的UI界面、模型面上播放视频 |
镜头及后处理管理 | 在沙盘引擎主框架的相机视角下,允许快捷自定义角度、位置偏移、速度、旋转等多项属性 同时支持多数常用的后处理效果,只需要使用简单的API就可进行开启及调整 |
客户端及SDK | 可在安全权限范围内调用有关客户端本地、Steamworks SDK相关的内容 |
地图编辑器(工具) | 引擎内置的地图编辑器,允许建立及导出沙盘引擎通用格式的地图文件 |
开发者自行实现(案例) | 说明 |
---|---|
背包系统 | 这类系统可以使用Character.Prop 物品系统作为底层数据交互,开发者要做的只是制作及绑定UI然后在合适的事件更新背包数据及UI的交互即可,配合物品系统的导入注册,完全可实现较高自定义的背包及物品系统 |
UI相关扩展系统 | 例如玩家状态信息、载具速度、油量系统等可使用GUI+客户端脚本数据交互 的方式来实现 |
其他功能 | 基于目前设计框架下的沙盘引擎,大多数类型的玩法都可通过各种常规、扩展思维操作来实现 沙盘引擎已经在常规思维情况下敲定了框架,绝大多数玩法都可以实现,开发者要做的是提前规划好方法和扩展思维 |
📒 引擎运行流程
此流程图仅作入门参考理解使用,可能不具有实时性和完整权威性。
📒 开发问题解答FAQ
常见一些可能存在的问题,或者避免风险大坑,可以提前了解确定
📘 是否可以高度自定义?
答案是可以。
《沙盘引擎》设计框架的初衷就是在容易、快速的基础上,可以进行客户端、世界玩法的高度自定义,也就是说默认原版模组并不会实现太多,更多逻辑功能会交给开发者来自行编写,同时编写难度会在一个容易到复杂难度之间平衡,既能尽可能高度自定义内容,又让代码方面尽可能的简单和快捷。
其中不乏包括UI界面(使用内置GUI或FairyGUI进行设计及绑定功能)、自定义外部资源(主要指音频、视频、图片、字体、模型等)。
📘 是否可以联机?
只要在正常及常规逻辑下编写脚本,世界脚本(WorldScript)设计初衷就是兼顾1~N人联机体验的,也就是所谓的单人模式就是1人的联机房间,所有的代码方式都是按照网络同步基础来写的。
📘 游戏编译或分发?
在《沙盘引擎》衍生作品中,都是以“独立模组”的方式进行创作呈献的,所以并不牵扯到编译部分,更多只是Js脚本的动态执行。
游戏分发时必须要附带原版的《沙盘引擎》本体,开发者可根据提供的命令行方式包装一份exe或者bat以来让玩家直接启动到模组(或有类似的.cfg启动配置)。
常规情况下,基于《沙盘引擎》制作的衍生游戏\玩法模式,无需其他授权可直接进行发布(支持自定义内容不侵权情况下的商用行为)。
更多内容参考《打包发布及分享》。