← 所有教學
第 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 分時結束這一回合,並把每個人的分數歸零。
  • 加上第二顆寶石,用不同的顏色。
  • 讓拿寶石的人變慢。提示:拿到寶石時把 Humanoid.WalkSpeed 設成 12,在 resetGem 裡再設回 16。