跳到主要内容

服务器脚本

什么是服务器脚本,为什么我们需要它们?

服务器脚本与客户端脚本的主要区别在于它们运行在服务器上。

对于客户端脚本,每个玩家运行的是脚本的本地版本,而对于服务器脚本,所有玩家运行的是同一版本的脚本。此外,服务器脚本和客户端脚本不共享相同的 API

大多数时候,我们应该能够使用客户端脚本来完成我们的任务,特别是有了像 SNetwork 或 SPersistence 这样的类,它们允许脚本之间相互通信并共享数据。

然而,我们有时可能会遇到更复杂的任务,需要一个独立的脚本(服务器脚本)作为通信、数据存储、信息处理、同步等的中心枢纽。一个使用服务器脚本实现的交互式对象的好例子是多玩家棋盘游戏。

创建服务器脚本:

  • 创建一个 GameObject。
  • 向 GameObject 添加服务器脚本组件。(添加组件 -> 服务器脚本)
  • Class ID字段中填入您服务器脚本的唯一标识符。(示例:com.example.theserverscript)
  • 将您的 .lua 文件拖入Script字段。
  • 添加一个 Virtual Good 组件。(添加组件 -> Virtual Good)
  • 服务器脚本的 Virtual Good 组件中最重要的部分是Type需要设置为Server Script
  • 上传 GameObject。

使用服务器脚本:

  • 创建一个 GameObject。
  • 添加一个Require Server Script组件。
  • Virtual Good ID字段设置为您上面创建的服务器脚本的相同虚拟商品 ID。
  • Class ID字段设置为您上面创建的服务器脚本的相同类 ID。
  • 添加一个Room Furniture组件(添加组件 -> Room Furniture)
  • 现在,此对象将在其放置的区域加载上面创建的服务器脚本。
  • 您还可以向此 GameObject 添加一个Scripting Runtime组件。(添加组件 -> Scripting Runtime)。

事件

与客户端脚本不同,在客户端脚本中您需要创建事件挂钩/绑定,而服务器脚本只需声明该函数,无需创建任何挂钩/绑定。

例如:

function OnAvatarJoin(id)
Space.Log(id .. " joined the scene.")
end

您可以在此处找到服务器脚本事件

示例项目

Trivia Box示例项目很好地展示了如何使用服务器脚本。

您可以在此处访问并下载其开源文件。

谢谢

[本指南仍在进行中。 请在此处报告问题]