โครงการนี้จะใช้ข้อความเงื่อนไขเพื่อสร้างส่วนที่จะให้หรือลบจุดบนลีดเดอร์บอร์ดขึ้นอยู่กับสีของส่วนเมื่อสัมผัส หากสีน้ำเงินจะให้ผู้เล่นไม่กี่คะแนน หากสีเขียวจะให้
การติดตั้งโครงการ
ส่วนที่ให้คะแนนสามารถเพิ่มได้ในโครงการใด ๆ ที่มีคะแนนเกี่ยวข้อง อินสแตนซ์เกมผจญภัยที่ผู้เล่นเก็บคะแนน
ติดตามจุด
เพื่อติดตั้งโครงการนี้คุณจะต้องมีลีดเดอร์บอร์ดเพื่อติดตามแต้มและส่วนที่เปลี่ยนสี รหัสสำหรับลีดเดอร์บอร์ดจะได้รับการให้บริการ
สร้างสคริปใหม่ใน ServerScriptService ที่มีชื่อว่า Leaderboard คัดลอกและวางรหัสในสคริป
--ใน ServerScriptService สร้างสคริปต์ที่มีชื่อว่า PlayerSetup ด้วยเนื้อหาด้านล่างlocal Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- ตัวอย่างของ IntValuelocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- วิ่งเมื่อเหตุการณ์ PlayerAdded เปิดใช้งานPlayers.PlayerAdded:Connect(onPlayerJoin)
ส่วนที่เปลี่ยนสี
สคริปต์จะทำงานผ่านสามสีที่แตกต่างกันสำหรับชิ้นส่วน แต่ละสีจะมีตัวแปรที่เก็บค่า RGB ของมันไว้ เป็นชนิดข้อมูลที่รวมชุดของสามตัวเลข (สีแดง สีเขียว สีฟ้า) ที่สร้างสี
สร้างชิ้นส่วนที่มีชื่อว่า PointPart ด้วยสคริปติดตั้งชื่อว่า PointScript
ใน PointScript ใช้ script.Parent เพื่ออ้างถึงส่วน
local pointPart = script.Parentสร้างแปรที่เก็บสีที่แตกต่างกัน แต่ละแปรควรถูกตั้งเป็น Color3.fromRGB() ซึ่งสร้างค่าสี
- สีน้ําเงิน (แต้มบาง): (0, 0, 255)
- สีเขียว (แต้มมาก): (0, 255, 0)
- สีแดง (เสียคะแนน): (255, 0, 0)
local pointPart = script.Parent-- สีlocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)เพิ่มตัวแปรสำหรับจุดเล็ก ๆ น้อย ๆ จำนวนมากขึ้น และตัวแปรสำหรับจุดมากขึ้นสามตัวที่จะลบออก
-- สีlocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- มูลค่าตรวจlocal smallPoints = 10local largePoints = 50local losePoints = 100
การเพิ่มบริการผู้เล่น
เพื่อให้คะแนน คุณจะต้องได้รับการเข้าถึงข้อมูลของผู้เล่นซึ่งเก็บไว้ใน Explorer ภายใต้ผู้เล่น และแยกออกจากตัวละคร นี่คือที่ที่คุณสามารถหาข้อมูลเช่นสถิติลีดเดอร์บอร์ดได้
คุณสามารถทำได้โดยการเพิ่มบริการ Players ให้กับสคริปของคุณ บริการ Services เป็นชุดของการก่อสร้างล่วงหน้าที่ทำโดยวิศวกรของ Roblox เพื่อประหยัดเวลาของคุณ
รับบริการ ผู้เล่น โดยการพิมพ์:
local Players = game:GetService("Players")
-- มูลค่าตรวจlocal smallPoints = 10local largePoints = 50local losePoints = 100-- ต้องการบริการlocal Players = game:GetService("Players")
ฟังก์ชันและเหตุการณ์
PointsScript จะต้องใช้งานได้สองประการ ฟังก์ชันแรกจะเพิ่มและลบชิ้นส่วน ฟังก์ชันที่สองจะตรวจสอบว่าผู้เล่นได้สัมผัสชิ้นส่วนหรือไม่ ฟังก์ชันเหล่านี้จะถูกเชื่อมต่อกับเหตุการณ์แตะ ซึ่งจะทำงานเมื่อส่
สร้างฟังก์ชันใหม่ที่มีชื่อว่า givePoints() และตัวแปรที่มีชื่อว่า player ภายใน เพิ่มคำพิมพ์ที่ใช้สำหรับการทดสอบ
local Players = game:GetService("Players")-- ให้หรือลบแต้มlocal function givePoints(player)print("Giving player points")endภายใต้นั้นสร้างฟังก์ชันที่สองที่มีชื่อว่า partTouched() ด้วยตัวแปรที่มีชื่อว่า otherPart
-- ให้หรือลบแต้มlocal function givePoints(player)print("Giving player points")end-- ตรวจสอบว่าผู้เล่นสัมผัสต้นอ่อนหรือไม่local function partTouched(otherPart)endในตัวฟังก์ชันใช้ตัวฟังก์ชัน GetPlayerFromCharacter() เพื่อตรวจสอบว่ามีผู้เล่นในตัวแปรอื่นหรือไม่
-- ตรวจสอบว่าผู้เล่นสัมผัสต้นอ่อนหรือไม่local function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endหากผู้เล่นแตะต้องส่วนหนึ่ง มันจะถูกเก็บไว้ในแปรที่เป็นตัวผู้เล่น หากไม่เป็นเช่นนั้น แปรจะยังคงเป็นตัวเปล่า
- ในตัวฟังก์ชันตรวจสอบว่าผู้เล่นมีค่าหรือไม่ หากมีค่าให้ givePoints(player) คุณ
- ภายใต้การใช้งาน, เชื่อมต่อ partTouched() กับเหตุการณ์ Touched ของ pointPart
-- ตรวจสอบว่าผู้เล่นสัมผัสต้นอ่อนหรือไม่local function partTouched(otherPart)-- รับผู้เล่นหากสัมผัสส่วนหนึ่งlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)วิ่ง โครงการ เมื่อผู้เล่นสัมผัสตรงส่วนไหน คุณจะเห็นข้อความในหน้าต่างการออกมาว่า: "Giving player points" เคล็ดลับการแก้ปัญหา:
- ตรวจสอบว่า "Players" ใน game:GetService("Players") มีตัวอักษรใหญ่และอยู่ในเครื่องหมายกว้าง
- partTouched() ควรเชื่อมต่อกับเหตุการณ์ของจุด Touched ของจุด
สร้างสีโค้ง
เพื่อวิเคราะห์ผ่านสีตัวสคริปต์จะใช้เวลา = วิเคราะห์ที่เปลี่ยนสีของชิ้นส่วนทุกไม่กี่วินาที เงื่อนไขสำหรับวิเคราะห์นี้จะเป็นจริงดังนั้นจึงสามารถทำงานได้อย่างต่อเนื่อง
ในตอนท้ายของสคริปต์ สร้างขึ้นใหม่เมื่อเงื่อนไขเป็นจริง ซึ่งหมายถึงว่าสแคร์เรอร์จะทำงานตลอดเวลา
-- ตรวจสอบว่าผู้เล่นสัมผัสต้นอ่อนหรือไม่local function partTouched(otherPart)-- รับผู้เล่นหากสัมผัสส่วนหนึ่งlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- ห่วงผ่านสีwhile true doendเป็นเจ้าของ, โค้ดสักครู่ที่จริงเป็น do ลูปที่เปลี่ยน pointPart เป็นตัวแปรสีที่คุณได้สร้าง อย่าลืมใช้ task.wait() ระหว่างสี. เมื่อเสร็จสิ้น, ตรวจสอบโค้ดของคุณต่อเวอร์ชันด้านล่าง.
-- ห่อผ่าน 3 สี รอระหว่างสีแต่ละสีwhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endทดสอบและตรวจสอบว่าสามสีทั้งหมดทำงานได้โดยไม่หยุด
เคล็ดลับการแก้ปัญหา
ในขณะนี้หากวงจรสีไม่ทำงานตามที่ตั้งใจไว้ให้ลองใช้หนึ่งในตัวเลือกต่อไปนี้
- ตรวจสอบว่าวงจรซ้ำอยู่ที่ด้านล่างของสคริปต์ ใต้อีเวนต์ Touched หากวงจรไม่อยู่ที่ด้านล่าง มันจะทำให้ส่วนอื่นของสคริปต์ทำงานได้อย่างถูกต้อง
- ตรวจสอบว่าแต่ละสีใน Color3.fromRGB() เขียนถูกต้องหรือไม่ ต้องมีตัวเลขสามตัวระหว่าง 0 และ 255 ที่แยกด้วยจุลภาคเช่น (255, 50, 0)
ให้คะแนนผู้เล่น
ผู้เล่นจะได้รับคะแนนตามสีปัจจุบันของชิ้นส่วนเมื่อพวกเขาแตะมัน
การหาสีปัจจุบัน
เมื่อผู้เล่นสัมผัสส่วนหนึ่ง สคริปต์จะต้องรู้สีปัจจุบันของส่วนหนึ่งเพื่อให้ได้รับคะแนนในภายหลัง
ค้นหา givePoints() แล้วแทนที่ข้อความทดสอบของคุณด้วยตัวแปรสำหรับสีปัจจุบันของ pointPart ตัวแปรนี้จะกำหนดว่าผู้เล่นจะได้รับ (หรือสูญเสีย) จุดเท่าไหร่
local function givePoints(player)local currentColor = pointPart.Colorendเพื่อส่งผลให้คะแนนของผู้เล่น ตารางอันดับสร้างแปรเพื่อเก็บไว้
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endตารางอันดับ
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
ให้หรือลบแต้ม
ต่อไป, คุณจะใช้ if และถ้าเท่านั้นเพื่อให้หรือลบจุดขึ้นอยู่กับสีของชิ้นส่วนเมื่อแตะ จำไว้ว่าสีน้ำเงินให้จำนวนเล็กน้อย, สีเขียวให้จำนวนมาก, และสีแดงลบจุด
ภายใน givePoints() ภายใต้แปรผงสี, ใช้ if สถานะเพื่อตรวจสอบว่าสีปัจจุบันเป็นสีน้ำเงินและหากเป็นเช่นนั้น จึงเพิ่ม smallPoints ให้กับมูลค่าสถานะปัจจุบันของผู้เล่น
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendเพื่อตรวจสอบสีเขียวให้เพิ่มอีกหากเป็นเงื่อนไข หากสีเขียวให้เพิ่มตัวแปร largePoints ให้กับจุดของผู้เล่น
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendใช้คำอื่นเพื่อลบจุดหากค่า part ไม่ใช่สีน้ำเงินหรือสีเขียว
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendสุดท้าย, ทำลาย ชิ้นส่วนหลังจาก if สถานะ, เพื่อให้สคริปต์ไม่สามารถให้คะแนนออกไป
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()ทดสอบและตรวจสอบว่าแต่ละสีให้คะแนนตามที่คาดไว้ แน่ใจว่าจะทดสอบ สาม เงื่อนไขทั้งหมด
ให้ความคิดเห็นแก่ผู้เล่น
จุดส่วนผสมทำงานได้ ตารางอันดับแก้ไขสิ่งนั้นโดยการสร้างอนุภาคเมื่อจุดส่วนผสมถูกทำลาย
การเพิ่มข้อเสนอแนะเมื่อผู้เล่นใช้ส่วนหนึ่งเช่นเสียง การเขย่า หรืออนุภาค ทำให้การโต้ตอบกับวัตถุน่าพึงใจมากขึ้นสำหรับผู้เล่น
การสร้างผลลัพธ์ของอนุภาค
เอฟเฟ็กต์อนุภาคจะเป็นสีเดียวกับชิ้นส่วนเมื่อสัมผัส เนื่องจากสีถูกเก็บไว้ในแปรงค์ต่างๆ จึงสามารถใช้ได้อย่างง่ายดาย
ใน givePoints() ที่ด้านล่างสร้าง ใหม่ ParticleEmitter อินสแตนซ์
local particle = Instance.new("ParticleEmitter")endผู้ปล่อยอนุภาคใช้ตารางสีเพื่อควบคุมสีของพวกเขา สร้างตารางสีใหม่และส่งสีปัจจุบันของพวกเขา
-- ทำลายส่วนpointPart:Destroy()-- สร้างอนุภาคlocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)อนุภาคจะต้องเป็นลูกของผู้เล่นที่แตะมัน สร้างแป้นที่มีข้อมูลตัวละครของผู้เล่น จากนั้นปัดตัวแป้นไปยังหัวของผู้เล่น
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")ใช้ task.wait() สำหรับเวลาสองวินาทีแล้วทำลายอนุภาค
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()ทดสอบเกมและตรวจสอบให้แน่ใจว่าอนุภาคจะติดตามผู้เล่นหลังจากแตะแต่ละสี
เคล็ดลับการแก้ปัญหา
ในขณะนี้หากอนุภาคไม่ทำงานตามที่ตั้งใจไว้ให้ลองใช้หนึ่งในต่อไปนี้
- สร้างเมื่อสร้างตัวอินสแตนซ์ใหม่ที่ ParticleEmitter เขียนว่า ถูกต้อง เช่นที่แสดงและอยู่ในการอ้างอิง
- เมื่อปกผิวตัวอนุภาค ให้แน่ใจว่าจะใช้ : ระหว่าง playerCharacter และ WaitForChild() โดยไม่มีช่องว่าง
สำเร็จ PointScript
สามารถอ้างอิงได้ด้านล่างเป็นเวอร์ชันที่เสร็จสิ้นของสคริปต์
local pointPart = script.Parent
--หน่วยความจำภายใน = เกม:GetService("ServerStorage")
-- ให้คะแนนบาง
local blue = Color3.fromRGB(0, 0, 255)
-- ให้แต้มมากขึ้น
local green = Color3.fromRGB(0, 255, 0)
-- ทำให้ผู้เล่นสูญเสียคะแนน
local red = Color3.fromRGB(255, 0, 0)
-- ทองที่มอบให้กับผู้เล่น
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- ให้ทองผู้เล่นตามสีของชิ้นส่วน
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- ทำลายชิ้นส่วน รอสองวินาที แล้วทำลายอนุภาค
pointPart:Destroy()
-- สร้างเอฟเฟกต์ประกายและทำลายมัน
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- เปลี่ยนสีของชิ้นส่วนตามแปรต่างๆ ต้องอยู่ด้านล่างของสคริปต์
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end