沙盘引擎 (SEngine)

创意诞生沙盘世界,不止如此想象!

用户工具

站点工具


侧边栏

developer:initial

📚 开发流程事项及问题解答

本文将为《沙盘引擎》模组的开发者进行前置介绍,建议开发前完整地阅读本文至少一次

注意:该文档更多适用于作为《沙盘引擎》创意开发的人群,而非普通玩家

📒 引擎分工机制

《沙盘引擎》的纯净工程是一个自由且开放的“纯净世界”。具体世界机制怎样运行完全由开发者来设计与实现。

引擎需要做好功能预制平衡工作 —— 哪些是引擎应该自带的,哪些是开发者应该自行实现的。

对于开发者,在设计之前需清楚,除去引擎自带的功能外,自己还需要做什么。

最终的平衡如下:

内置实现 说明
基础世界观 引擎内预设了世界的组成元素,如地形、实体、载具、天气等。
(例如《我的世界》游戏内内可生成的怪物、动物等角色)
联机功能 引擎实现了联机功能,并可被开发者灵活应用;单机与联机共用脚本逻辑
沙盘地图 通用的地图格式,基于此格式的地图都可被沙盘引擎加载
对于一些特定玩法的模组,自定义几个专用的游戏地图是有必要的
(例如生存游戏,考虑到玩法的体验,比如地图物资刷新点等,应该自定义或修改一个新的专用地图)
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启动配置)。

常规情况下,基于《沙盘引擎》制作的衍生游戏\玩法模式,无需其他授权可直接进行发布(支持自定义内容不侵权情况下的商用行为)。

更多内容参考《打包发布及分享》

developer/initial.txt · 最后更改: 2023/09/13 10:21 由 bibiboxs