meta data for this page
📚 世界&扩展
在 沙盘引擎 游戏过程中,几乎全局贯彻着世界场景的概念。
换句话说,除了引擎内置场景(引擎主页、编辑器等)外,模组始终都在世界场景中运行。
世界场景:由模组资源文件、模组脚本组、游戏地图共同组成。
每次加载新的场景,都会重新创建一个世界,并按照要求加载模组的资源、脚本、游戏地图。
📒 世界入口
在之前的文章中,我们所介绍过脚本的逻辑入口。
而世界入口与逻辑入口有着异曲同工之处,两者也有息息相关的联系。
默认情况下,脚本逻辑入口位于Script/Main
目录中,也就是执行Main
脚本组内的代码。
本文中我们所提到过,模组每次加载的脚本组、游戏地图是一个整体,它们共同加载最终组成了游戏世界。
正因如此,当模组加载完成后,引擎在内部执行了以下步骤:
- 模组加载完成,切换到世界场景
- 由于是首次加载模组(指本次启动模组),因此使用默认的游戏地图(空白地图)与脚本组(Main)
- 入口场景加载完毕,进入默认世界
简单来说,模组每次加载完成后,默认会进入一个空白地图(虚空),并且执行脚本组(Main)的代码内容。
📒 默认世界
当模组正常加载完成,玩家由此进入到模组的默认世界(空白地图+Main脚本组)。
在游戏过程中如果有任何的异常情况,都会断开服务器连接,并自动退回加载初始世界。
通常情况下,开发者会将此世界作为游戏主菜单,并在此编写相关的代码逻辑。
常规世界与默认世界本质上相同,但在功能上有一些细节的区别:
功能 | 默认世界 | 常规世界 |
---|---|---|
聊天框 | 始终禁用 | 默认启用 |
联机支持 | 无法连接,仅本地 | 正常连接,允许加入 |
游戏菜单 | 默认开启游戏菜单 | 默认隐藏游戏菜单,可通过ESC 开关内置菜单内置菜单会自动增加继续游戏、返回主菜单等选项 |
根据 沙盘引擎 的框架设计,默认世界应该主要用于游戏主菜单。
游戏菜单相关UI是可选+扩展的,可通过API开启或关闭,以及更换自定义样式。
📒 常规世界
与上文所介绍的默认世界不同,常规世界主要用于除主菜单外的其他用途。
换句话说,任何与实际游戏玩法有关的内容,都应该在常规世界实现。
默认世界 与 常规世界 的区别非常简单,只要加载的脚本组不为Main
即被认为是常规世界。
根据上方的介绍,已知默认世界是默认加载Main
脚本组的世界场景,同时也是模组加载后自动执行的。
当玩家希望进行下一步,可能会点击开始游戏按钮(或其他方式)以进入正式游戏。
由于默认世界的设计机制主要适用于游戏主菜单,因此开发者应该加载新的常规世界以进行主要游戏。
📒 建立世界
建立世界(或称为创建主机,以自动连接到服务器)的方法非常简单,只需执行下方的代码,参数分别为:加载的地图、脚本组名称。
CreateHost("se_miami", "MyWorld");
也就是说,当这段代码执行后,引擎会执行以下步骤:
- 断开当前连接,并建立一个服务器+自动连接
- 根据方法的参数,引擎将使用
se_miami
地图文件,以及Script/MyWorld
文件夹下的脚本进行建立 - 如果一切正常,等待地图加载完成,建立成功
通过以上的步骤,您应该理解到,所谓的建立世界就是用指定的地图+指定的脚本,运行一个新的世界场景。
模组脚本组的意义正是如此,模组目录下Script
文件夹负责存放脚本组(脚本文件夹),每个文件夹代表一个脚本组合。
简单来说,可以理解脚本组就像游戏MOD,因为每个脚本组里面的脚本和代码大不相同,因此每次建立世界,就等同于选择地图+选择MOD(玩法脚本)的过程。
当建立世界就绪后,玩家会自动载入到新的世界,并基于指定的地图及脚本。
每次建立\断开连接的过程中,都会自动清理上次场景中存在的资源(绝大多数),因此新的世界不会保留上个世界的内容。
📒 加入世界
加入世界 相当于连接到其他服务器,也就是不以自身为服务器主机,而是加入其他人所建立的世界中。
ConnectHost("127.0.0.1", 8192);
当这段代码执行后,引擎会执行以下步骤:
- 断开当前连接,并尝试连接到目标服务器
- 根据方法的参数,引擎将连接到
127.0.0.1
+8192
的目标服务器 - 如果服务器能与玩家正常通信,等待数据同步完成,加入成功
📒 扩展世界
沙盘引擎 的世界场景主要由游戏地图+脚本组共同组成。
- 游戏地图:展示直观的场景画面,也就是视觉上的感受
- 脚本组:使用此脚本组(文件夹)下的脚本文件,搭配游戏地图实现玩法及功能上的扩展
常规情况下,沙盘引擎 完全支持一个脚本组配合不同地图兼容使用。
抛砖引玉,例如开发者编写了一个比较灵活的(非完全固定坐标)的生存游戏脚本组,完全可以在建立世界时修改为其他地图,这样就非常轻松的实现了更换不同地图,但最终玩法上仍然是基于生存游戏脚本组。
当游戏世界加载完毕后,我们希望为这个世界赋予更多色彩和生命力,最终结合各类功能组成游戏。
沙盘引擎 主要围绕几个通用类型对象进行扩展:
类型 | 说明 | 示例 |
---|---|---|
模型 [Model] | 3D模型、建筑等对象,主要用于展示 | 游戏内的建筑和模型、建造系统等 |
角色 [Character] | 有生命力的生物,人类、动物等 | 生成玩家控制的角色、游戏NPC |
载具 [Vehicle] | 可供驾驶的各类载具,摩托、汽车、飞机、船等 | 游戏内的各类交通工具 |
拾取物 [Pickup] | 可供角色等实体触发碰撞,以达到接触效果 | 物品掉落、商店入口、任务入口等 |
检查点 [Checkpoint] | 可供角色等实体触发碰撞,以达到接触效果,与拾取物有样式上的主要区别 | 赛车检查点、较大范围的触发器 |
更多 | - | - |
以上所介绍的是主要部分的世界构成元素,简单来说,至少80%以上的游戏玩法,均可通过上述的几种对象类型来组合成玩法。
除此之外,引擎还有更多辅助的功能和对象类型,几乎可以实现绝大多数可能的玩法及功能。
想象一下,将这些功能设计好,并使用相关的代码API实现出来,这就是我们所称之的“游戏”。