← บทเรียนทั้งหมด
บทเรียนที่ 5

สร้างเกมขโมยและป้องกันเกมแรกของเธอ

ผู้เล่นทุกคนมีฐาน คว้าอัญมณีจากตรงกลาง วิ่งกลับบ้านเพื่อทำคะแนน และแตะตัวคนที่ถืออัญมณีอยู่

ฟรี70 นาที · มือใหม่ บทสุดท้าย · Roblox Studio
1
ขั้นที่ 1 / 8

ตั้งค่าสถานที่

  1. เปิด Roblox Studio คลิก New Experience แล้วเลือกเทมเพลต Baseplate
  2. อัญมณีจะวางอยู่ตรงกลางแผนที่ ฐานสี่แห่งจะอยู่รอบๆ แต่ละแห่งห่างจากตรงกลางประมาณ 60 studs
  3. เกมนี้ต้องมีผู้เล่นอย่างน้อยสองคน ตอนท้ายเธอจึงจะทดสอบด้วยผู้เล่นทดสอบสองคน

ดูรายละเอียดเพิ่ม

  • เทมเพลต Baseplate อยู่ในรายการเทมเพลตบนหน้าจอเริ่มต้น
  • ช่อง Position ใน Properties บอกว่าพาร์ตอยู่ที่ไหน Position 60, 0.5, 0 อยู่ห่างจากกลางแผนที่ 60 studs
  • ย้าย SpawnLocation ซึ่งเป็นแพลตฟอร์มที่ผู้เล่นโผล่ขึ้นมา ให้มาใกล้ตรงกลาง เพื่อให้ผู้เล่นทุกคนเริ่มต้นห่างจากอัญมณีเท่ากัน
  • ถ้าใช้ Mac ให้ใช้ปุ่ม Cmd ทุกครั้งที่บทเรียนนี้บอกว่า Ctrl
ขั้นนี้ใช้ไม่ได้สำหรับฉัน

ลองเช็กสามอย่างนี้ก่อน

  • ชื่อของพาร์ตและสคริปต์ทุกชิ้นต้องตรงกับในบทเรียนเป๊ะ รวมถึงตัวพิมพ์ใหญ่ด้วย
  • สคริปต์ต้องอยู่ในวัตถุที่ถูกต้อง ดูป้ายที่อยู่เหนือกล่องโค้ด
  • เปิดหน้าต่าง Output จากเมนู Window ข้อความสีแดงจะบอกว่าสคริปต์ไหนและบรรทัดไหนมีปัญหา

ยังติดอยู่ใช่ไหม? เขียนมาหาเราได้เลย →

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 เป๊ะๆ ไม่มีเว้นวรรคก่อนตัวเลข
  • เซิร์ฟเวอร์ที่มีผู้เล่นมากกว่าสี่คนจะมีผู้เล่นมากกว่าฐาน ภายหลังเธอตั้งขนาดเซิร์ฟเวอร์เป็น 4 ได้ในการตั้งค่าเกมบน Creator Hub
เคล็ดลับ. ให้ฐานทั้งสี่อยู่ห่างจากตรงกลางเท่ากัน เกมจะได้ยุติธรรมกับทุกคน
ขั้นนี้ใช้ไม่ได้สำหรับฉัน

ลองเช็กสามอย่างนี้ก่อน

  • ชื่อของพาร์ตและสคริปต์ทุกชิ้นต้องตรงกับในบทเรียนเป๊ะ รวมถึงตัวพิมพ์ใหญ่ด้วย
  • สคริปต์ต้องอยู่ในวัตถุที่ถูกต้อง ดูป้ายที่อยู่เหนือกล่องโค้ด
  • เปิดหน้าต่าง Output จากเมนู Window ข้อความสีแดงจะบอกว่าสคริปต์ไหนและบรรทัดไหนมีปัญหา

ยังติดอยู่ใช่ไหม? เขียนมาหาเราได้เลย →

3
ขั้นที่ 3 / 8

สร้างอัญมณี

  1. เพิ่ม Part ตรงกลางแผนที่ สูงจากพื้นประมาณ 4 studs ตั้ง 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 เพื่อหา คลิกมัน แล้วเปลี่ยน ActionText และ HoldDuration ใน Properties
  • ในเกม ปุ่มเล็กๆ ที่มีตัวอักษร E และคำว่า Take จะโผล่ขึ้นเมื่อเธอยืนใกล้อัญมณี
  • บนโทรศัพท์ ผู้เล่นจะกดนิ้วค้างไว้บนปุ่มนั้น
ขั้นนี้ใช้ไม่ได้สำหรับฉัน

ลองเช็กสามอย่างนี้ก่อน

  • ชื่อของพาร์ตและสคริปต์ทุกชิ้นต้องตรงกับในบทเรียนเป๊ะ รวมถึงตัวพิมพ์ใหญ่ด้วย
  • สคริปต์ต้องอยู่ในวัตถุที่ถูกต้อง ดูป้ายที่อยู่เหนือกล่องโค้ด
  • เปิดหน้าต่าง Output จากเมนู Window ข้อความสีแดงจะบอกว่าสคริปต์ไหนและบรรทัดไหนมีปัญหา

ยังติดอยู่ใช่ไหม? เขียนมาหาเราได้เลย →

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 ค้างไว้ ส่วนนั้นจะมาในขั้นต่อไป
ขั้นนี้ใช้ไม่ได้สำหรับฉัน

ลองเช็กสามอย่างนี้ก่อน

  • ชื่อของพาร์ตและสคริปต์ทุกชิ้นต้องตรงกับในบทเรียนเป๊ะ รวมถึงตัวพิมพ์ใหญ่ด้วย
  • สคริปต์ต้องอยู่ในวัตถุที่ถูกต้อง ดูป้ายที่อยู่เหนือกล่องโค้ด
  • เปิดหน้าต่าง Output จากเมนู Window ข้อความสีแดงจะบอกว่าสคริปต์ไหนและบรรทัดไหนมีปัญหา

ยังติดอยู่ใช่ไหม? เขียนมาหาเราได้เลย →

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 เอาการเชื่อมออกและวางอัญมณีกลับไปตรงกลาง

ดูรายละเอียดเพิ่ม

  • ถ้าจะเปิดสคริปต์อีกครั้ง ให้ดับเบิลคลิก Game ใน Explorer
  • คลิกหลังตัวอักษรตัวสุดท้ายของโค้ด แล้วกด Enter สองครั้ง จากนั้นกด Ctrl+V คราวนี้อย่ากด Ctrl+A ไม่อย่างนั้นเธอจะแทนที่ส่วนแรก
  • อัญมณีลอยอยู่เหนือหัวของเธอ 4 studs ตอนที่เธอถืออยู่
  • วิธีทดสอบ: หยิบอัญมณี แล้วเช็กว่าปุ่ม Take หายไปตลอดเวลาที่เธอถืออยู่
ขั้นนี้ใช้ไม่ได้สำหรับฉัน

ลองเช็กสามอย่างนี้ก่อน

  • ชื่อของพาร์ตและสคริปต์ทุกชิ้นต้องตรงกับในบทเรียนเป๊ะ รวมถึงตัวพิมพ์ใหญ่ด้วย
  • สคริปต์ต้องอยู่ในวัตถุที่ถูกต้อง ดูป้ายที่อยู่เหนือกล่องโค้ด
  • เปิดหน้าต่าง Output จากเมนู Window ข้อความสีแดงจะบอกว่าสคริปต์ไหนและบรรทัดไหนมีปัญหา

ยังติดอยู่ใช่ไหม? เขียนมาหาเราได้เลย →

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 ไม่มีวันจบ โค้ดที่อยู่ข้างล่างจึงไม่เคยทำงาน
ขั้นนี้ใช้ไม่ได้สำหรับฉัน

ลองเช็กสามอย่างนี้ก่อน

  • ชื่อของพาร์ตและสคริปต์ทุกชิ้นต้องตรงกับในบทเรียนเป๊ะ รวมถึงตัวพิมพ์ใหญ่ด้วย
  • สคริปต์ต้องอยู่ในวัตถุที่ถูกต้อง ดูป้ายที่อยู่เหนือกล่องโค้ด
  • เปิดหน้าต่าง Output จากเมนู Window ข้อความสีแดงจะบอกว่าสคริปต์ไหนและบรรทัดไหนมีปัญหา

ยังติดอยู่ใช่ไหม? เขียนมาหาเราได้เลย →

7
ขั้นที่ 7 / 8

ทดสอบกับผู้เล่นสองคน

  1. ข้างปุ่ม Play เปิดเมนูเล็กๆ แล้วเลือก Server & Clients ตั้งจำนวนผู้เล่นเป็น 2 แล้วกด Play
  2. Studio จะเปิดหน้าต่างเกมสองหน้าต่าง แต่ละหน้าต่างคือผู้เล่นคนละคนที่มีฐานคนละแห่ง
  3. หยิบอัญมณีในหน้าต่างหนึ่ง ในอีกหน้าต่างให้วิ่งเข้าไปชนผู้เล่นคนนั้น อัญมณีจะกลับไปตรงกลาง
  4. หยุดการทดสอบด้วยปุ่ม Stop สีแดงในหน้าต่างหลักของ Studio แล้วเปลี่ยนเมนูกลับเป็น Test

ดูรายละเอียดเพิ่ม

  • เมนูเล็กๆ คือลูกศรที่อยู่ติดกับปุ่ม Play ด้านบนของ Studio
  • หน้าต่างเกมสองหน้าต่างจะเปิดซ้อนกัน ลากหน้าต่างหนึ่งไปไว้ข้างๆ เพื่อให้เห็นทั้งสอง
  • คลิกในหน้าต่างก่อนใช้แป้นพิมพ์ ปุ่มต่างๆ จะไปที่หน้าต่างที่เธอคลิกล่าสุด
  • การทดสอบด้วยสองหน้าต่างต้องใช้คอมพิวเตอร์ที่มีหน่วยความจำพอ ถ้าช้ามาก ให้ปิดโปรแกรมอื่นก่อน
ขั้นนี้ใช้ไม่ได้สำหรับฉัน

ลองเช็กสามอย่างนี้ก่อน

  • ชื่อของพาร์ตและสคริปต์ทุกชิ้นต้องตรงกับในบทเรียนเป๊ะ รวมถึงตัวพิมพ์ใหญ่ด้วย
  • สคริปต์ต้องอยู่ในวัตถุที่ถูกต้อง ดูป้ายที่อยู่เหนือกล่องโค้ด
  • เปิดหน้าต่าง Output จากเมนู Window ข้อความสีแดงจะบอกว่าสคริปต์ไหนและบรรทัดไหนมีปัญหา

ยังติดอยู่ใช่ไหม? เขียนมาหาเราได้เลย →

8
ขั้นที่ 8 / 8

เผยแพร่เกม

  1. เลือก File → Publish to Roblox ตั้งชื่อเกมและเขียนคำอธิบายสั้นๆ
  2. บนเว็บไซต์ Creator Hub เปิดเกมของเธอแล้วตอบแบบสอบถาม Maturity
  3. ตั้งเกมเป็น Public แล้วส่งลิงก์ให้เพื่อน

ดูรายละเอียดเพิ่ม

  • ตอนเผยแพร่ครั้งแรก Studio จะถามชื่อและคำอธิบาย ให้คลิก Create
  • Creator Hub คือเว็บไซต์ create.roblox.com ลงชื่อเข้าใช้ด้วยบัญชีเดียวกันแล้วคลิกเกมของเธอในรายการ
  • Roblox อาจขอข้อมูลเพิ่มก่อนที่เกมจะเปิดเป็นสาธารณะได้ เช่น การตรวจสอบอายุของบัญชี หน้านั้นจะบอกว่ายังขาดอะไร
  • ถ้าเธออายุต่ำกว่า 18 ปี ให้ทำขั้นนี้ร่วมกับพ่อแม่หรือผู้ปกครอง
เคล็ดลับ. เกมนี้จะสนุกก็ต่อเมื่อมีผู้เล่นคนอื่น ชวนเพื่อนสองสามคนเข้าเซิร์ฟเวอร์เดียวกันสำหรับแมตช์แรก
ขั้นนี้ใช้ไม่ได้สำหรับฉัน

ลองเช็กสามอย่างนี้ก่อน

  • ชื่อของพาร์ตและสคริปต์ทุกชิ้นต้องตรงกับในบทเรียนเป๊ะ รวมถึงตัวพิมพ์ใหญ่ด้วย
  • สคริปต์ต้องอยู่ในวัตถุที่ถูกต้อง ดูป้ายที่อยู่เหนือกล่องโค้ด
  • เปิดหน้าต่าง Output จากเมนู Window ข้อความสีแดงจะบอกว่าสคริปต์ไหนและบรรทัดไหนมีปัญหา

ยังติดอยู่ใช่ไหม? เขียนมาหาเราได้เลย →

ลองแก้เองดูสิ

  • จบรอบเมื่อผู้เล่นได้ 5 คะแนน แล้วตั้งคะแนนทุกคนกลับเป็น 0
  • เพิ่มอัญมณีอันที่สองที่มีสีต่างออกไป
  • ทำให้ผู้ถือเดินช้าลง คำใบ้: ตั้ง Humanoid.WalkSpeed เป็น 12 ตอนหยิบอัญมณี และกลับเป็น 16 ใน resetGem