Roblox Studio · 第 3 课

Luau 编程入门:从第一行 print() 到用代码控制 Part

在 ServerScriptService 创建第一个普通 Script,理解 print()、Output、local 变量和对象引用,用短代码安全修改 Part。

60 分钟 第 1—2 课后 Luau Script Editor Output local 变量

Course overview

从鼠标搭建,走向“让游戏按规则行动”。

前两课里,学生用 Move、Scale 和 Rotate 制作了静态场景。从这一课开始,我们给电脑写出能够按顺序执行的指令。Roblox 使用的脚本语言叫 Luau;日常常说 Lua,但在 Roblox 项目中,Luau 是更准确的名称。

本课强调一个可靠循环:写一小段代码,点击 Play,读取 Output,点击 Stop,只改一个问题,再次测试。短代码、早测试、读第一条错误,是后续所有脚本课都会重复的习惯。

01 · SCRIPT

让指令有位置

将普通 Script 放进 ServerScriptService,名称说明用途。

02 · OUTPUT

看见程序运行

print()、warn()、脚本名和行号共同帮助我们定位问题。

03 · VARIABLE

给数据起名字

用 local 保存字符串、数字、布尔值和对象引用。

ServerScriptService 中的 Lesson03_FirstScript 与第一行 print 代码
图 3-1:第一个普通 Script 位于 ServerScriptService,脚本编辑器已写入 print()。

Learning route

先准备,再动手;看到结果后,记得保存。

每完成一小步,就测试一次。先说出你预计会看到什么,再用 Play 和 Output 检查,不用急着一次写完所有代码。

1

保存 Lesson03

从 Lesson02 另存,准备一个 Anchored 的 Lesson03Part。

2

创建普通 Script

在 ServerScriptService 中创建 Lesson03_FirstScript。

3

运行 print()

通过 Playtest 在 Output 中看见 Hello, Roblox!。

4

创建 local 变量

分别保存 string、number 和 boolean。

5

引用对象

用 WaitForChild 找到 Lesson03Part,再修改属性。

6

读取第一条错误

根据脚本名、行号和错误描述修复问题。

First script

用注释和 print(),让第一段代码被看见。

普通 Script 放在 ServerScriptService 中,位置清楚,也便于在 Output 中识别服务器消息。创建后立刻重命名为 Lesson03_FirstScript,不要长期保留 Script、Script1 这样的默认名称。

双短横线 -- 后面是注释,它只帮助人阅读,不会执行。print() 会把括号中的内容发送到 Output,即使画面没有变化,也能证明脚本已经运行。

Lesson03_FirstScriptLuau
-- 第3课:第一个 Luau 脚本
print("Hello, Roblox!")
  • 在 Explorer 展开 ServerScriptService,点击加号并选择 Script。
  • 按 F2 重命名,双击打开 Script Editor。
  • 点击 Play,在 Output 中读取正文、Server、脚本名和行号。
  • 点击 Stop 后再编辑脚本。
Output 显示 Hello Roblox 和脚本来源
图 3-2:Playtest 后,Output 显示 print() 消息及其来源。
输入规则:使用英文半角引号、括号和逗号;代码大小写敏感,score、Score、SCORE 是不同名称。

Local variables

local 是给数据准备一个用途清晰的名字。

变量像一个带名称的盒子:等号右边是要保存的值,左边是变量名。初学阶段使用 local 创建局部变量,作用范围更清楚。变量名采用 camelCase,例如 courseName、playerScore、newWidth。

string 保存文字,number 保存数值,boolean 只有 true 或 false。数字用 + 运算;字符串用 .. 连接。不要把文字和数字直接用 + 相加。

变量与 OutputLuau
local courseName = "Roblox Studio"
local score = 10
local isReady = true

print(courseName)
print(score)
print(isReady)
  • 每一行只做一件主要事情。
  • 变量名要表达用途,不用 a、b、c 代替。
  • 运行前检查红色波浪线、引号和括号是否成对。
Luau 中创建字符串数字和布尔变量
图 3-3:local 保存 string、number 和 boolean。
Output 显示变量的字符串数字和布尔值
图 3-4:Output 依次显示三种变量值。
小练习:建立 coins=7 和 bonus=3,计算 total;再用 .. 把 “Space” 与 “Obby” 连接成游戏标题。

Object reference

先保存 Part 引用,再用点号安全修改它的属性。

在 Workspace 中创建并准确命名 Lesson03Part,然后勾选 Anchored。workspace:WaitForChild("Lesson03Part") 会等待对象出现并返回它的引用;拿到引用后,就能通过点号访问 Name、Color、Size 等属性。

Playtest 期间的颜色和尺寸变化属于临时运行世界。点击 Stop 后通常会还原,这正是安全测试的价值:先验证行为,再决定是否在编辑状态永久修改。

修改 Lesson03PartLuau
local lessonPart = workspace:WaitForChild("Lesson03Part")
local newWidth = 14

lessonPart.Color = Color3.fromRGB(255, 170, 0)
lessonPart.Size = Vector3.new(newWidth, 2, 6)
print("已修改:", lessonPart.Name)
  • 对象名称必须完全一致;Lesson03Part 与 lesson03part 不同。
  • Color 需要 Color3;Size 需要包含 X、Y、Z 的 Vector3。
  • 把 newWidth 从 14 改成 8,再次 Play 比较结果。
脚本取得 Lesson03Part 并修改颜色和尺寸
图 3-5:用变量保存对象引用,再修改 Color 与 Size。
Playtest 中橙色且加宽的 Lesson03Part
图 3-6:运行时 Part 变为橙色并加宽;Stop 后会回到编辑状态。
最小可验证改动:先只改一个属性并 print 对象名。看到结果后,再扩展代码;不要一次加入很多未知代码。

Debug loop

错误信息不是失败,而是 Studio 给你的定位线索。

遇到红色消息时,固定处理顺序:先看最早的一条错误,再看脚本名和行号,点击 Stop,回到对应位置检查符号或名称,修复后重新 Play。后面的错误可能只是第一处语法问题引发的连锁结果。

例如字符串缺少右引号时,不要删掉整段代码;补上成对的英文引号,重新测试,确认 Output 不再出现 Malformed string。

错误与修复Luau
-- 错误版本
local message = "Lesson 03
print(message)

-- 修复:给 Lesson 03 补上右引号
local fixedMessage = "Lesson 03"
print(fixedMessage)
  • 先找最上面的红色消息。
  • 确认脚本名和第几行。
  • Stop 后只改一个问题。
  • 重新 Play,确认正常输出出现且错误消失。
Script Editor 与 Output 中显示字符串语法错误
图 3-7:缺少右引号时,编辑器与 Output 都会给出定位线索。
安全习惯:只运行自己课堂项目中的短代码;不要从 Toolbox、聊天消息或不明模型复制并运行脚本。

Homework

轮到你来改一改,做出自己的版本。

1 三个变量

用 gameTheme、levelCount、isComplete 分别保存文字、数字和布尔值。

2 三条清晰输出

每一条 print 都带有标签文字,让读者知道看到的值代表什么。

3 一次属性修改

安全地修改 Lesson03Part 的 Color、Size 或 Transparency,再修复一个小错误。

完成标准:先在 Playtest 中验证作品,再点击 Stop,保存为“姓名缩写_Lesson03”或对应 Homework 副本;不要覆盖上一课的可运行版本。

Exit questions

先自己回答,再展开看看。

为什么普通 Script 放在 ServerScriptService?

位置清楚,便于管理服务器端脚本并在 Output 中识别其消息。

print() 的作用是什么?

把信息发送到 Output,用来确认代码是否执行并观察数据。

local 和 = 分别表示什么?

local 创建局部变量;= 把右侧的值赋给左侧变量名。

出错时为什么先修第一条红色消息?

后续错误可能由第一处语法错误连锁产生。