← 所有教程
第 5 篇教程

做出你的第一个偷了就跑游戏

每位玩家都有一个基地。从中间抢到宝石,跑回家得分,还要抓住拿着宝石的人。

免费70 分钟 · 新手,最后一篇 · Roblox Studio
1
第 1 / 8

设置场景

  1. 打开 Roblox Studio,点击 New Experience,选择 Baseplate 模板。
  2. 宝石会放在地图的正中间。四个基地围在它的四周,每个离中间大约 60 studs。
  3. 这个游戏至少需要两位玩家,所以最后你要用两位测试玩家来测试它。

更多细节

  • Baseplate 模板在开始页面的模板列表里。
  • Properties 里的 Position 栏显示零件在哪里。Position 60, 0.5, 0 离地图中心 60 studs。
  • 把 SpawnLocation,也就是玩家出现的那块平台,移到靠近中间的地方,这样每个玩家出发时离宝石的距离都一样。
  • 在 Mac 上,每当教程说 Ctrl 的时候,都改用 Cmd 键。
这一步我做不出来

先检查这三件事

  • 每个零件和脚本的名字都要和教程里的完全一样,大小写也要一样。
  • 脚本要放在正确的物体里面。看一看代码框上面的标签。
  • 从 Window 菜单里打开 Output 窗口。红色的文字会告诉你哪个脚本、哪一行有问题。

还是不行?给我们写信 →

2
第 2 / 8

做出基地

  1. 在 Explorer 里把鼠标移到 Workspace 上,点击 + 并添加一个 Folder。把它命名为 Bases。
  2. 添加一个 Part。把 Size 设为 16, 1, 16,打开 Anchored,并把它设成灰色。把它拖进 Bases,并命名为 Base1。
  3. 用 Ctrl+D 复制三次。把复制出来的那几个命名为 Base2、Base3 和 Base4,并把它们分别移到地图的每一边。

更多细节

  • 要把零件放进文件夹,就在 Explorer 里把它的名字拖到 Bases 这个名字上。
  • 用 Ctrl+D 复制出来的零件已经在 Bases 文件夹里了。用 F2 给每一个改名。
  • 名字必须正好是 Base1、Base2、Base3 和 Base4,数字前面没有空格。
  • 如果一个服务器里有四个以上的玩家,玩家就比基地多。以后你可以在 Creator Hub 的游戏设置里,把服务器人数设为 4。
小提示. 让四个基地离中间一样远。这样游戏对每个人都公平。
这一步我做不出来

先检查这三件事

  • 每个零件和脚本的名字都要和教程里的完全一样,大小写也要一样。
  • 脚本要放在正确的物体里面。看一看代码框上面的标签。
  • 从 Window 菜单里打开 Output 窗口。红色的文字会告诉你哪个脚本、哪一行有问题。

还是不行?给我们写信 →

3
第 3 / 8

做出宝石

  1. 在地图正中间、离地面大约 4 studs 高的地方添加一个 Part。把 Size 设为 2, 2, 2,选一个鲜艳的颜色,并把 Material 设为 Neon。把它命名为 Gem。
  2. 打开 Anchored 和 Massless,并关闭 CanCollide。
  3. 把鼠标移到 Gem 上,点击 + 并添加一个 ProximityPrompt。把 ActionText 设为 Take,把 HoldDuration 设为 1。

每一部分的作用

  • ProximityPrompt 会在玩家站得很近时显示一个按钮。按住它 1 秒就会触发。
  • 打开 Massless 并关闭 CanCollide,可以避免宝石拖慢拿着它的玩家,也不会推到他。

更多细节

  • Anchored、Massless 和 CanCollide 都是 Properties 里的复选框。
  • 点 + 以后,输入 ProximityPrompt 就能找到它。点它,然后在 Properties 里修改 ActionText 和 HoldDuration。
  • 在游戏里,你站在宝石附近时,会出现一个小按钮,上面有字母 E 和 Take 这个词。
  • 在手机上,玩家要用手指按住那个按钮。
这一步我做不出来

先检查这三件事

  • 每个零件和脚本的名字都要和教程里的完全一样,大小写也要一样。
  • 脚本要放在正确的物体里面。看一看代码框上面的标签。
  • 从 Window 菜单里打开 Output 窗口。红色的文字会告诉你哪个脚本、哪一行有问题。

还是不行?给我们写信 →

4
第 4 / 8

给每位玩家一个基地和一个分数

  1. 把鼠标移到 ServerScriptService 上,点击 + 并添加一个 Script。把它命名为 Game。
  2. 删掉里面已有的那一行,然后粘贴下面的代码。这是三个部分中的第一部分。
  3. 按 Play。有一个基地会变成绿色。那一个就是你的。
ServerScriptService > Game (1 / 3)
local Players = game:GetService("Players")

local bases = workspace:WaitForChild("Bases")
local gem = workspace:WaitForChild("Gem")
local home = gem.CFrame
local carrier = nil

Players.PlayerAdded:Connect(function(player)
	local stats = Instance.new("Folder")
	stats.Name = "leaderstats"
	stats.Parent = player

	local score = Instance.new("IntValue")
	score.Name = "Score"
	score.Parent = stats

	for _, base in ipairs(bases:GetChildren()) do
		if base:GetAttribute("Owner") == nil then
			base:SetAttribute("Owner", player.UserId)
			base.Color = Color3.fromRGB(60, 220, 120)
			break
		end
	end
end)

Players.PlayerRemoving:Connect(function(player)
	for _, base in ipairs(bases:GetChildren()) do
		if base:GetAttribute("Owner") == player.UserId then
			base:SetAttribute("Owner", nil)
			base.Color = Color3.fromRGB(160, 160, 160)
		end
	end
end)

每一部分的作用

  • 最前面的几行会找到那些基地和宝石,并记住宝石最开始的位置。
  • SetAttribute 会把主人的 UserId 写到第一个空着的基地上。
  • PlayerRemoving 会在基地的主人离开时,把这个基地重新空出来。

更多细节

  • 脚本会在新的标签页里打开。点一下代码里面,按 Ctrl+A,再按 Ctrl+V,替换掉所有内容。
  • 哪个基地变成绿色,取决于文件夹里基地的顺序。四处走走,找到你自己的基地。
  • 右上角的玩家列表显示 Score 0。
  • 现在你走到宝石那里按住 E,还是什么都不会发生。这要等到下一步。
这一步我做不出来

先检查这三件事

  • 每个零件和脚本的名字都要和教程里的完全一样,大小写也要一样。
  • 脚本要放在正确的物体里面。看一看代码框上面的标签。
  • 从 Window 菜单里打开 Output 窗口。红色的文字会告诉你哪个脚本、哪一行有问题。

还是不行?给我们写信 →

5
第 5 / 8

让玩家拿走宝石

  1. 再次打开 Game 脚本。
  2. 把这段代码粘贴在上一步的代码下面。
  3. 按 Play,走到宝石那里,按住 E。宝石会跳到你的头顶上,并跟着你走。
ServerScriptService > Game (2 / 3)
local function resetGem()
	carrier = nil

	local weld = gem:FindFirstChild("CarryWeld")
	if weld then
		weld:Destroy()
	end

	gem.Anchored = true
	gem.CFrame = home
	gem.ProximityPrompt.Enabled = true
end

gem.ProximityPrompt.Triggered:Connect(function(player)
	local character = player.Character
	local root = character and character:FindFirstChild("HumanoidRootPart")
	if carrier or not root then return end

	carrier = player
	gem.ProximityPrompt.Enabled = false
	gem.Anchored = false
	gem.CFrame = root.CFrame * CFrame.new(0, 4, 0)

	local weld = Instance.new("WeldConstraint")
	weld.Name = "CarryWeld"
	weld.Part0 = root
	weld.Part1 = gem
	weld.Parent = gem
end)

每一部分的作用

  • carrier 记住是谁拿着宝石。宝石被人拿着的时候,别人不能拿走。
  • WeldConstraint 把宝石粘在玩家身上,所以它会跟着玩家一起移动。
  • resetGem 会移除这个焊接,并把宝石放回中间。

更多细节

  • 要再次打开脚本,在 Explorer 里双击 Game。
  • 点一下代码最后一个字符的后面,按两次 Enter。然后按 Ctrl+V。这次不要按 Ctrl+A,不然你会把前面的部分替换掉。
  • 你拿着宝石的时候,它会飘在你头上 4 studs 的地方。
  • 测试一下:拿起宝石,然后检查在你拿着它的整个期间,Take 按钮是不是消失了。
这一步我做不出来

先检查这三件事

  • 每个零件和脚本的名字都要和教程里的完全一样,大小写也要一样。
  • 脚本要放在正确的物体里面。看一看代码框上面的标签。
  • 从 Window 菜单里打开 Output 窗口。红色的文字会告诉你哪个脚本、哪一行有问题。

还是不行?给我们写信 →

6
第 6 / 8

加上得分和抓人

  1. 把最后这一部分粘贴在 Game 脚本的最末尾。
  2. 按 Play,拿起宝石,跑到你那个绿色的基地上。Score 会加 1,宝石会回到中间。
ServerScriptService > Game (3 / 3)
for _, base in ipairs(bases:GetChildren()) do
	base.Touched:Connect(function(hit)
		local player = Players:GetPlayerFromCharacter(hit.Parent)
		if player and player == carrier and base:GetAttribute("Owner") == player.UserId then
			player.leaderstats.Score.Value += 1
			resetGem()
		end
	end)
end

while true do
	task.wait(0.2)

	if carrier then
		local weld = gem:FindFirstChild("CarryWeld")
		local root = weld and weld.Part0
		local character = root and root.Parent
		local humanoid = character and character:FindFirstChildOfClass("Humanoid")

		if not humanoid or humanoid.Health <= 0 or root.Position.Y < -20 then
			resetGem()
		else
			for _, other in ipairs(Players:GetPlayers()) do
				local otherRoot = other ~= carrier and other.Character and other.Character:FindFirstChild("HumanoidRootPart")
				if otherRoot and (otherRoot.Position - root.Position).Magnitude < 5 then
					resetGem()
					break
				end
			end
		end
	end
end

每一部分的作用

  • 每个基地会检查三件事:有玩家碰到了它,这位玩家拿着宝石,而且这个基地是属于他的。
  • 最下面的循环每秒运行 5 次。如果另一位玩家离拿着宝石的人不到 5 studs,宝石就会回到原处。
  • 如果拿着宝石的人离开了游戏,或者掉出了地图,这个循环也会重置宝石。

更多细节

  • 再点一下脚本最后一个字符的后面,按两次 Enter,然后粘贴。
  • 做好的脚本按这个顺序有三个部分:基地和得分,拿宝石,得分和标记。
  • 不属于任何人的灰色基地不给分。只有你自己的绿色基地才算数。
  • 你一个人没法测试标记。要在下一步用两个玩家来测试。
常见错误. 把这一部分粘贴在脚本的中间。while 循环永远不会结束,所以它下面的任何代码都不会运行。
这一步我做不出来

先检查这三件事

  • 每个零件和脚本的名字都要和教程里的完全一样,大小写也要一样。
  • 脚本要放在正确的物体里面。看一看代码框上面的标签。
  • 从 Window 菜单里打开 Output 窗口。红色的文字会告诉你哪个脚本、哪一行有问题。

还是不行?给我们写信 →

7
第 7 / 8

用两位玩家来测试

  1. 在 Play 按钮旁边打开那个小菜单,选择 Server & Clients。把玩家数量设为 2,然后按 Play。
  2. Studio 会打开两个游戏窗口。每个窗口里是一位不同的玩家,有不同的基地。
  3. 在一个窗口里拿起宝石。在另一个窗口里,跑去撞那位玩家。宝石会回到中间。
  4. 用 Studio 主窗口里红色的 Stop 按钮停止测试,然后把那个菜单切换回 Test。

更多细节

  • 那个小菜单,就是 Studio 顶部 Play 按钮旁边的那个箭头。
  • 两个游戏窗口会叠在一起打开。把其中一个拖到旁边,这样你就能同时看到两个。
  • 用键盘之前,先点一下窗口里面。按键会发给你最后点过的那个窗口。
  • 用两个窗口测试,需要内存足够大的电脑。如果非常慢,就先关掉其他程序。
这一步我做不出来

先检查这三件事

  • 每个零件和脚本的名字都要和教程里的完全一样,大小写也要一样。
  • 脚本要放在正确的物体里面。看一看代码框上面的标签。
  • 从 Window 菜单里打开 Output 窗口。红色的文字会告诉你哪个脚本、哪一行有问题。

还是不行?给我们写信 →

8
第 8 / 8

发布它

  1. 选择 File → Publish to Roblox。给游戏起一个名字,再写一段简短的介绍。
  2. 在 Creator Hub 网站上打开你的游戏,填写 Maturity 问卷。
  3. 把游戏设为 Public,然后把链接发给一位朋友。

更多细节

  • 第一次发布时,Studio 会问你要一个名字和一段介绍。点 Create。
  • Creator Hub 就是网站 create.roblox.com。用同一个账号登录,然后在列表里点你的游戏。
  • 游戏公开之前,Roblox 可能还会要求更多信息,比如对账号做年龄验证。页面会告诉你还缺什么。
  • 如果你不满 18 岁,请和家长一起完成这一步。
小提示. 这个游戏要和别的玩家一起玩才有意思。第一局,请两三位朋友进入同一个服务器。
这一步我做不出来

先检查这三件事

  • 每个零件和脚本的名字都要和教程里的完全一样,大小写也要一样。
  • 脚本要放在正确的物体里面。看一看代码框上面的标签。
  • 从 Window 菜单里打开 Output 窗口。红色的文字会告诉你哪个脚本、哪一行有问题。

还是不行?给我们写信 →

现在自己改一改

  • 当有玩家得到 5 分时结束这一轮,并把所有人的分数重新设为 0。
  • 再加一颗第二颗宝石,用不同的颜色。
  • 让拿着宝石的人变慢。提示:拿起宝石时把 Humanoid.WalkSpeed 设为 12,在 resetGem 里再设回 16。