script.的作用和require
#Roblox
#术
script.
当前模块下的脚本。
init.server.luau和init.client.luau 会将同级文件夹当做一个模块 具体看: init.server.luau.md
local WorldBuilder = require(script.WorldBuilder)
require
加载并取得一个模块的返回值。
和c#的using是完全不同的两个概念。
Workspace
Workspace 是 Roblox 当前正在运行的 3D 场景,放进去的实体对象才真正进入游戏世界;但天空、光照、UI、服务端脚本、资源仓库等有各自专门的服务,不应该全部塞进 Workspace。

Lighting就是放跟天气、光照有关的专门的内容,比如光照放在Workspace中就没用。
网络同步
Roblox 会自动把这些变化复制给所有客户端。所以这一步不需要 RemoteEvent。
Anchored属性
spawn.Anchored = true 的作用是:把这个物体固定在世界中,不让物理系统推动它移动或掉落。
它仍然可以被看见、被碰撞,除非你另外设置 CanCollide = false。
Players
local Players = game:GetService("Players")
Players
├─ PlayerA
├─ PlayerB
└─ PlayerC
每个 Player 代表一个真实进入游戏的玩家账号。
比如监听玩家的进入和离开:
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined")
end)
Players.PlayerRemoving:Connect(function(player)
print(player.Name .. " left")
end)
玩家对象和角色模型不是同一个东西
Players
└─ PlayerA -- 玩家账号对象
Workspace
└─ PlayerA -- 玩家角色模型 Character
├─ Humanoid
└─ HumanoidRootPart
客户端可以拿到本地玩家
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
玩家相关的东西通常挂在 Player 下面
比如玩家可能拥有一些装饰
一句话总结
Players 是 Roblox 的玩家管理服务,负责告诉你谁进来了、谁离开了、每个玩家是谁;而玩家真正站在世界里的身体模型,会出现在 Workspace 里。
RunService
RunService 也是 Roblox 内置服务,但它通常不会显示在资源管理器 Explorer 里。
RunService 主要用来处理每帧运行、心跳更新、客户端/服务端判断。
RunService.Heartbeat:Connect(function(dt)
print("每一帧之后运行", dt)
end)
dt 是距离上一帧过去了多少秒。比如做移动、吸附、持续检测时很常用。
Workspace = 3D 世界对象
Players = 玩家列表和玩家生命周期
RunService = 游戏循环/每帧更新工具
可以在服务端和客户端用,调用方法不同
服务端:RunService.Heartbeat
客户端:RunService.RenderStepped