沙盘引擎 (SEngine)

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

用户工具

站点工具


侧边栏

developer:mod:modules

📚 过时的内容

📒 模块说明

沙盘引擎全称为《Sandtable Engine》,在开发及公共阶段的命名空间表现为SE,也可以理解为默认的命名空间就是SE(脚本层面可省略)。

举例说明
SandtableEngine.World
SE.World
World
//以上三者等价,均表示SE方案下的World类

功能模块可以被分为世界端(Server)客户端(Client),有些Event或Function只在特定环境下有效,开发者应留意区分。

以下内容只作模块介绍与更新说明,具体的API调用请访问脚本开发分类。

📒 原生功能

这里包含几乎Client\Server通用的原生代码类。

📘 游戏管理类(SE.Game)

关于游戏通用的内容管理,任何与“游戏世界”无关,但是与游戏本体内容相关的内容。

📘 语言类(SE.Langauge)

关于游戏多语言本地化的功能。

📘 工具类(SE.Helper)

开发者在创作时可能会用到的功能类。

📒 基础功能

这里包含引擎世界内主要使用或者基于主逻辑的类。

📘 世界模块(SE.World)

世界模块表示所有与世界、服务器房间有关的内容。

例如:服务器名称、服务器人数或密码、世界设定、全局设定、天气或时间设定等。

📘 实体基类(SE.Entity)

所有以实体展示的内容基类,这是一个抽象类,没有实质的显示效果。

在当前版本中,所谓的实体仅包含下方表格的内容,其他内容不能被称作为“实体”。

类型 说明
ModelObject 静态建筑、建筑、基于物体的粒子效果等
Character 角色
Vehicle 载具

📘 静态对象(SE.StaticObject)

以静态对象存在的实体,或基于此存在的实体(如附带功能脚本的其他物体、模型等)。

例如:静态模型、基于对象粒子效果、基于对象的其他物体(如树木、石头等,或包含功能脚本的对象)。

有些物体可能有特殊功能,例如可砍伐的树木,实际上也是一种静态对象,只是默认被赋值了“树木脚本”(一个引擎内置脚本类)。

换句话说,在某些意义上,你也可以在初始化时给其他任何一个模型赋值“功能脚本”,比如可以让桌子也实现可采集的功能。

📘 玩家对象(SE.Player)

任何一个由真实玩家操控的玩家,都是一个Player类,这是一个没有实体的数据类。

如果是单机(私人)模式下,实际上就只有本地一个玩家Player。

Player类存在的意义更多是为了区分多人模式下的玩家,如果开发者想做一个单人游戏或单人房间,那这个类的用处将不大。

如果制作的游戏模组想要实现多人功能,那么应该思考一下这个类,保证多人情况下写的代码也不会冲突。

📘 角色对象(SE.Character)

游戏世界中出现的任何生物都被称为角色,角色通常在游戏中起到很关键的作用。

所谓的“玩家”实际上也是指定给SE.Player一个操纵的角色SE.Character,角色是可见的实体。

📘 载具对象(SE.Vehicle)

表示所有内置驾驶功能的载具(或者可以被称为载具的对象),包括但不限于认知内的汽车、自行车、飞机、直升机、船只等。

📘 拾取对象(SE.Pickup)

通常表示任何可被拾取交互的类(例如:地上的物品、特定模型但没有绑定功能的拾取物【类GTA3】)。

拾取对象在创建时可以被分成几个形态。

ID 形态 说明
0 拾取物形态 默认形态,类似GTA3系列Pickup,拥有包围效果
1 静态形态 和场景融为一体,没有任何包围特效,但是可被拾取和交互
2 检查点形态 类似GTA3系列的Checkpoint,拥有底部光圈效果,更适合作为触发点使用

当Pickup被试图拾取时,开发者可在脚本层面Event进行具体的处理(如是否删除,或者使用默认机制还是拦截处理)。

📒 子功能类

此功能类表示一些并不常用或者基于某种情况下所使用的类。

📘 区域对象(SE.Area)

区域类等同于地图编辑器内的区域组件(基于StaticObject)。

常用于判定是否进入某个区域,以及可以为区域命名和UUID方便查询,也可作为临时所用的Checkpoint检查点(如赛车检查点)来使用。

区域类可设定包围盒形状、形态、颜色等。

也可用来实现类似《绝地求生》的缩圈效果(设定圆柱形态以及半径、颜色等)。

区域对象可在建立时设定类型Type,以来决定它的使用方向。

ID 类型 说明
0 区域地标类型
(此类型将默认不包括包围盒效果)
设定为此类型,将默认为此区域内是一个“世界地标”(例如XXX城市的A区)
在设定此类型后,开发者应该将对象属性补充,或者自行引用变量备用
此类型可以快速将大地图进行分区,可以扩展实现区域范围判定等需求
1 包围盒类型 设定为此类型,将区域对象仅作为有包围盒效果的显示作用,具体逻辑将需要开发者自行设定
区域地标类型的区别是用来帮助区分这个区域到底是地标区域还是临时的Checkpoint检查点

📘 地图标记(SE.MapMarker)

在大\小地图上同步显示的地图标记区域\点,主要是显示效果,基本没有什么功能。

在地图标记创建时,可以设定几个形态。

ID 类型 说明
0 标记点 png图片形式的标记
1 标记区域 多边形动态绘制的颜色区域,需要设定Bound属性(仅此类型需要)

📘 故事片段(SE.StoryClip)

每个故事片段表示一个剧本逻辑,可能很长也可能很短,更像是一个提前编好的“故事脚本”。

对于一些RPG类型的游戏开发,此功能将使用比较多,同时内置了对话交流等机制。

开发者更需要注意此类与文本相关的内容,语言文件上的适配和设定。

📘 路径片段(SE.PathClip)

是一个抽象的非实体类。

记录了不同类型下的路径数据信息,以供其他脚本或开发者使用。

ID 类型 说明
0 线性路径 无任何其他处理
1 贝赛尔曲线路径 可设定曲线属性调整幅度

📘 音频片段(SE.Sound)

是一个抽象的非实体类。

记录了已经被建立的音频信息,可通过API进行播放、暂停、属性设定及销毁。

📘 生成器类(ObjectCreator)

是一个抽象的非实体类。

主要作用是按照逻辑和属性定时生成某个物体。

可能被一些StaticObject脚本使用,也可以由开发者自行建立使用。

当前部分将在后续版本完善。

📘 火车对象(SE.Train)

此功能类仅在可能使用火车的地图场景下使用,由于和传统意义的载具不同,所以是一个单独的功能类。

当前部分将在后续版本完善。

📒 扩展功能

扩展功能一般是在特定情况下使用的功能。

📘 虚拟世界(SE.VirtualWorld)

虚拟世界实际上与World场景下的世界没有太大区别,唯一的不同是虚拟世界一般用于MainMenu主菜单界面的世界使用。

案例:开发者想实现准备菜单界面,点击某个【按钮】后镜头移动到某个建筑内,然后建筑有一个Character角色做着指定的动作,这时如果玩家点击另外一个【按钮】,Character将会做另外一个指定的动作。

如果你对《沙盘引擎》已经有部分了解,你会觉得“这难道不是World世界端的功能吗?”

的确如此,不过虚拟世界存在的意义就在于,World世界端只能在World场景和World.js情况下进行工作,如果想在主菜单情况下使用是逻辑上行不通的。

这就需要开发者在主菜单时使用相关代码建立一个虚拟世界,然后指定一个自定义JavaScript脚本作为这个虚拟世界的逻辑脚本,然后就可以开始编写逻辑了。

需要注意,虚拟世界不提供任何实际的网络同步功能,因为它的使用场景并不是给玩家游戏,而是给玩家进行世界内容的“展示”。

📘 Json类(SE.Json)

顾名思义,如果开发者有存档或数据保存之类的需求,可以使用Json的方式进行储存。

📘 SQLite类(SE.SQLite)

顾名思义,如果开发者有中型或高级数据保存的需求,可以使用SQLite的方式进行储存,具体看开发者个人使用习惯。

📘 屏幕后处理类(SE.ScreenEffect)

在沙盘引擎客户端中内置了一些常用的屏幕后处理效果(例如Blur、动态模糊、颜色处理等),开发者通常只需要几行代码就可以激活、修改后处理效果。

案例:开发者制作了一个背包系统,想实现激活背包时除UI外,游戏界面高斯模糊,这时就可以在对应事件里激活Blur的后处理并设置强度、颜色等属性,以及Layer等层级设定。

📘 GUI类(SE.Client.GUI)

GUI类主要负责在客户端的用户界面交互(如主菜单界面的按钮、图片、进度条等),除了在主菜单界面使用较多外,甚至可以在游戏阶段自定义新的交互形式。

在沙盘引擎中,有关GUI的功能分成两个部分,分别是FairyGUI模板NativeGUI组成。

沙盘引擎默认使用FairyGUI进行UI系统的使用,同时为开发者提供了引擎内使用FGUI的模板示例(可在Demo找到),所谓的模板也就是按规定命名格式设定好的FGUI存档文件。

除了默认的FGUI设计方式外,如果有相对简单UI需求(或习惯于代码方式的建立UI),也可以使用基于FGUI方式NativeGUI,也就是在FGUI组件的基础上,沙盘引擎为一些常用的组件进行了一个封装,也可以实现大多数常规UI功能,并且此方法不需要开发者绘制UI,会使用UI图集的方式加载指定样式UI(类似皮肤),当然开发者也可以自行制作一个图集皮肤文件以供加载。

简单总结,如果你对UI方面有着比较高的自定义、动画需求,那么你就可以通过FairyGUI模板方式进行高度自定义制作UI,反之可以直接使用代码方式的NativeGUI直接进行UI编写。

由于GUI功能在引擎内相对比较关键,所以会单独开一个文档进行解释(GUI功能参考)

📒 子脚本类

子脚本类指的是通常继承自某些基类下,实现不同功能的脚本类。

此类内容会涉及一些游戏底层一些的机制,更适合深度开发者进行研究和自定义属性。

例如:玩家使用枪支武器射击时的WeaponGuns

当前部分将在后续版本完善。

developer/mod/modules.txt · 最后更改: 2023/09/18 22:21 由 bibiboxs