服务器脚本
什么是服务器脚本,为什么我们需要它们?
服务器脚本与客户端脚本的主要区别在于它们运行在服务器上。
对于客户端脚本,每个玩家运行的是脚本的本地版本,而对于服务器脚本,所有玩家运行的是同一版本的脚本。此外,服务器脚本和客户端脚本不共享相同的 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示例项目很好地展示了如何使用服务器脚本。
谢谢
[本指南仍在进行中。 请在此处报告问题]