meta data for this page
  •  

📚 差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
developer:mod:modules [2023/08/19 22:54] – [GUI类(SE.Client.GUI)] vegetazdeveloper:mod:modules [2025/07/24 17:05] (当前版本) – 移除 bibiboxs
行 1: 行 1:
-<markdown> 
-# 引擎功能模块 
  
-《沙盘引擎》除了内置的地图编辑器外,主要的核心玩法、机制都是基于**引擎功能**来实现的。 
- 
-引擎功能几乎影响到引擎及游戏内所有的机制,并将部分合适的API暴露到脚本层,以供开发者进行调用。 
- 
-> 本文档**比较重要**,有助于玩家\开发者快速且系统的了解《沙盘引擎》底层实现和公开API解释。 
-> 
-> 简单来讲,就是以**文本+技术解释**的方式来系统的**简单介绍**这款“游戏”的各类玩法和功能模块清单。 
- 
-注意:此文档只作**模块清单整理参考**,以及模块功能**简单介绍和关键字指南**,具体的API详情参考**[脚本开发文档](scripting "脚本开发文档")**! 
- 
-## 前置说明 
- 
-沙盘引擎并不是传统意义上的“游戏引擎”,而是**基于世界沙盘**模式下的一种**可高度二创的引擎**。 
- 
-也就是说,沙盘引擎**并不完全适用于制作任何类型游戏**,引擎会在一定的基础上**提前实现好一些逻辑**,在保证**易上手和高自定义**的平衡下,开发者**在此基础上进行创作**。 
- 
-> **举例:**沙盘引擎内存在许多内置好的资源库,以及角色的拾取、使用、背包等完成逻辑,引擎已经实现了这些基础的,并不需要开发者从头开始写,但是为了可高度自定义,引擎也没有将这些功能写的特别完善,常用功能留出了基本的逻辑和接口。 
-> 
-> **举例2:**沙盘引擎内可能有一些武器、枪支物品,当通过API让某个角色拾取并拿出武器射击后,不需要开发者再去编写射击、命中、扣血的逻辑(但可以修改伤害值,已达到自定义),简单来说,日常生活中常见的很多逻辑已经写好,相当于给予开发者一个完善但是纯净的世界,开发者要在这样的情况下进行创意开发而不是底层编写。(开发者应该考虑使用武器、射击等玩法,而不是考虑如何实现射击) 
- 
- 
- 
-## 模块说明 
- 
-沙盘引擎**全称为《Sandtable Engine》**,在开发及公共阶段的命名空间表现为`SE`,也可以理解为默认的命名空间就是SE(脚本层面可省略)。 
- 
-``` 
-举例说明 
-SandtableEngine.World 
-SE.World 
-World 
-//以上三者等价,均表示SE方案下的World类 
-``` 
- 
-功能模块可以被分为**世界端(Server)**与**客户端(Client)**,有些Event或Function只在特定环境下有效,开发者应留意区分。 
- 
-以下内容只作模块介绍与更新说明,具体的API调用请访问[脚本开发](scripting "脚本开发")分类。 
- 
- 
- 
-## 原生功能 
- 
-> 这里包含几乎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    | 区域地标类型<br />(此类型将默认不包括包围盒效果) | 设定为此类型,将默认为此区域内是一个“世界地标”(例如XXX城市的A区)<br />在设定此类型后,开发者应该将对象属性补充,或者自行引用变量备用<br />此类型可以快速将大地图进行分区,可以扩展实现区域范围判定等需求 | 
-| 1    | 包围盒类型                                         | 设定为此类型,将区域对象仅作为有包围盒效果的显示作用,具体逻辑将需要开发者自行设定<br />与**区域地标类型**的区别是用来帮助区分这个区域**到底是地标区域**还是**临时的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](https://www.fairygui.com/)进行UI系统的使用,同时为开发者提供了引擎内使用FGUI的模板示例(可在Demo找到),所谓的模板也就是按规定命名格式设定好的FGUI存档文件。 
-> 
-> 除了默认的FGUI设计方式外,如果有相对简单UI需求(或习惯于代码方式的建立UI),也可以使用**基于FGUI方式**的`NativeGUI`,也就是在FGUI组件的基础上,沙盘引擎为一些常用的组件进行了一个封装,也可以实现大多数常规UI功能,并且此方法不需要开发者绘制UI,会使用**UI图集**的方式加载指定样式UI(类似皮肤),当然开发者也可以自行制作一个图集皮肤文件以供加载。 
-> 
-> 简单总结,如果你对UI方面有着比较高的自定义、动画需求,那么你就可以**通过FairyGUI模板方式**进行高度自定义制作UI,反之可以直接使用代码方式的**NativeGUI**直接进行UI编写。 
- 
-==**由于GUI功能在引擎内相对比较关键,所以会单独开一个文档进行解释`(GUI功能参考)`。**== 
- 
- 
- 
-## 子脚本类 
- 
-> 子脚本类指的是通常继承自某些基类下,实现不同功能的脚本类。 
-> 
-> 此类内容会涉及一些游戏底层一些的机制,更适合深度开发者进行研究和自定义属性。 
-> 
-> 例如:玩家使用枪支武器射击时的`WeaponGuns`类 
- 
-当前部分将在后续版本完善。 
- 
-</markdown> 
- 
- 
-</markdown> 
-n>