📚 世界&扩展

在 沙盘引擎 游戏过程中,几乎全局贯彻着世界场景的概念。

换句话说,除了引擎内置场景(引擎主页、编辑器等)外,模组始终都在世界场景中运行。

世界场景:模组资源文件、模组脚本组、游戏地图共同组成。

每次加载新的场景,都会重新创建一个世界,并按照要求加载模组的资源、脚本、游戏地图

📒 世界入口

在之前的文章中,我们所介绍过脚本的逻辑入口

世界入口逻辑入口有着异曲同工之处,两者也有息息相关的联系。

默认情况下,脚本逻辑入口位于Script/Main目录中,也就是执行Main脚本组内的代码。

本文中我们所提到过,模组每次加载的脚本组、游戏地图是一个整体,它们共同加载最终组成了游戏世界

正因如此,当模组加载完成后,引擎在内部执行了以下步骤:

  1. 模组加载完成,切换到世界场景
  2. 由于是首次加载模组(指本次启动模组),因此使用默认的游戏地图(空白地图)脚本组(Main)
  3. 入口场景加载完毕,进入默认世界

简单来说,模组每次加载完成后,默认会进入一个空白地图(虚空),并且执行脚本组(Main)的代码内容。

📒 默认世界

当模组正常加载完成,玩家由此进入到模组的默认世界(空白地图+Main脚本组)

在游戏过程中如果有任何的异常情况,都会断开服务器连接,并自动退回加载初始世界

通常情况下,开发者会将此世界作为游戏主菜单,并在此编写相关的代码逻辑。

常规世界与默认世界本质上相同,但在功能上有一些细节的区别:

功能 默认世界 常规世界
聊天框 始终禁用 默认启用
联机支持 无法连接,仅本地 正常连接,允许加入
游戏菜单 默认开启游戏菜单 默认隐藏游戏菜单,可通过ESC开关内置菜单
内置菜单会自动增加继续游戏、返回主菜单等选项

根据 沙盘引擎 的框架设计,默认世界应该主要用于游戏主菜单

游戏菜单相关UI是可选+扩展的,可通过API开启或关闭,以及更换自定义样式

📒 常规世界

与上文所介绍的默认世界不同,常规世界主要用于除主菜单外的其他用途。

换句话说,任何与实际游戏玩法有关的内容,都应该在常规世界实现。

默认世界 与 常规世界 的区别非常简单,只要加载的脚本组不为Main即被认为是常规世界

根据上方的介绍,已知默认世界是默认加载Main脚本组的世界场景,同时也是模组加载后自动执行的。

当玩家希望进行下一步,可能会点击开始游戏按钮(或其他方式)以进入正式游戏。

由于默认世界的设计机制主要适用于游戏主菜单,因此开发者应该加载新的常规世界以进行主要游戏。

📒 建立世界

建立世界(或称为创建主机,以自动连接到服务器)的方法非常简单,只需执行下方的代码,参数分别为:加载的地图、脚本组名称

CreateHost("se_miami", "MyWorld");

也就是说,当这段代码执行后,引擎会执行以下步骤

  1. 断开当前连接,并建立一个服务器+自动连接
  2. 根据方法的参数,引擎将使用se_miami地图文件,以及Script/MyWorld文件夹下的脚本进行建立
  3. 如果一切正常,等待地图加载完成,建立成功

通过以上的步骤,您应该理解到,所谓的建立世界就是用指定的地图+指定的脚本,运行一个新的世界场景

模组脚本组的意义正是如此,模组目录下Script文件夹负责存放脚本组(脚本文件夹),每个文件夹代表一个脚本组合。

简单来说,可以理解脚本组就像游戏MOD,因为每个脚本组里面的脚本和代码大不相同,因此每次建立世界,就等同于选择地图+选择MOD(玩法脚本)的过程。

当建立世界就绪后,玩家会自动载入到新的世界,并基于指定的地图及脚本

每次建立\断开连接的过程中,都会自动清理上次场景中存在的资源(绝大多数),因此新的世界不会保留上个世界的内容。

📒 加入世界

加入世界 相当于连接到其他服务器,也就是不以自身为服务器主机,而是加入其他人所建立的世界中。

ConnectHost("127.0.0.1", 8192);

当这段代码执行后,引擎会执行以下步骤

  1. 断开当前连接,并尝试连接到目标服务器
  2. 根据方法的参数,引擎将连接到127.0.0.1+8192的目标服务器
  3. 如果服务器能与玩家正常通信,等待数据同步完成,加入成功

📒 扩展世界

沙盘引擎 的世界场景主要由游戏地图+脚本组共同组成。

  • 游戏地图:展示直观的场景画面,也就是视觉上的感受
  • 脚本组:使用此脚本组(文件夹)下的脚本文件,搭配游戏地图实现玩法及功能上的扩展

常规情况下,沙盘引擎 完全支持一个脚本组配合不同地图兼容使用。

抛砖引玉,例如开发者编写了一个比较灵活的(非完全固定坐标)的生存游戏脚本组,完全可以在建立世界时修改为其他地图,这样就非常轻松的实现了更换不同地图,但最终玩法上仍然是基于生存游戏脚本组

当游戏世界加载完毕后,我们希望为这个世界赋予更多色彩和生命力,最终结合各类功能组成游戏

沙盘引擎 主要围绕几个通用类型对象进行扩展:

类型 说明 示例
模型 [Model] 3D模型、建筑等对象,主要用于展示 游戏内的建筑和模型、建造系统等
角色 [Character] 有生命力的生物,人类、动物等 生成玩家控制的角色、游戏NPC
载具 [Vehicle] 可供驾驶的各类载具,摩托、汽车、飞机、船等 游戏内的各类交通工具
拾取物 [Pickup] 可供角色等实体触发碰撞,以达到接触效果 物品掉落、商店入口、任务入口等
检查点 [Checkpoint] 可供角色等实体触发碰撞,以达到接触效果,与拾取物有样式上的主要区别 赛车检查点、较大范围的触发器
更多 - -

以上所介绍的是主要部分世界构成元素,简单来说,至少80%以上的游戏玩法,均可通过上述的几种对象类型来组合成玩法。

除此之外,引擎还有更多辅助的功能和对象类型,几乎可以实现绝大多数可能的玩法及功能。

想象一下,将这些功能设计好,并使用相关的代码API实现出来,这就是我们所称之的“游戏”。