Dự án này sẽ sử dụng các tuyên bố điều kiện để tạo một phần mà sẽ cho hoặc lấy điểm trên bảng xếp hạng tùy thuộc vào màu của phần khi chạm vào. Nếu màu xanh, thì sẽ cho người chơi một vài điểm. Nếu màu xanh lá, thì sẽ cho một lượng
Tạo dự án
Điểm đến có thể được thêm vào bất kỳ dự án nào mà điểm đến liên quan. Ví ví dụ / trường hợp, một trò chơi phiêu lưu mà người chơi thu thập điểm.
Theo dõi điểm
Để cài đặt dự án này, bạn sẽ cần một bảng xếp hạng để theo dõi các điểm và một phần thay đổi màu sắc. Mã cho bảng xếp hạng sẽ được cung cấp.
Tạo một script mới ở ServerScriptService có tên là Leaderboard. Sao chép và hoàn chỉnh mã bên dưới vào script.
--Trong ServerScriptService, tạo một script tên là PlayerSetup với nội dung bên dưới.local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- Ví dụ về một IntValuelocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- Chạy onPlayerJoin khi sự kiện PlayerAdded bắt đầuPlayers.PlayerAdded:Connect(onPlayerJoin)
Thay đổi màu sắc của bộ phận
Script sẽ lặp lại ba màu khác nhau cho phần. Mỗi màu sẽ có một biến để lưu giá trị RGB của nó, một loại dữ liệu bao gồm một loạt ba số (màu đỏ, màu xanh, màu xanh) tạo ra các màu.
Tạo một phần tên là PointPart với một script đính kèm tên là PointScript.
Trong PointScript, hãy sử dụng script.Parent để tham khảo bộ phận.
local pointPart = script.ParentTạo các biến để lưu các màu khác nhau. Mỗi biến nên được đặt Color3.fromRGB() , tạo một giá trị màu.
- Màu xanh (Một số điểm): (0, 0, 255)
- Xanh Lá (Nhiều Điểm): (0, 255, 0)
- Đỏ (Mất Điểm): (255, 0, 0)
local pointPart = script.Parent-- Màulocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)Thêm biến cho một lượng nhỏ của điểm, một lượng lớn hơn của điểm và một lượng thứ ba để loại bỏ điểm.
-- Màulocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- Giá trị điểmlocal smallPoints = 10local largePoints = 50local losePoints = 100
Thêm Dịch Vụ Người Chơi
Để đạt được điểm, bạn sẽ cần phải có quyền truy cập thông tin của người chơi được lưu trong Explorer dưới Mục chơi, và nó được tách biệt khỏi mục đối tượng nhân vật. Đây là nơi thông tin như thống kê bảng xếp hạng có thể được tìm thấy.
Bạn có thể làm điều này bằng cách thêm dịch vụ Players vào script của bạn. Services là một loạt các hàm được xây dựng trước đó của Roblox để tiết kiệm thời gian cho bạn.
Lấy dịch vụ Người chơi bằng cách nhập:
local Players = game:GetService("Players")
-- Giá trị điểmlocal smallPoints = 10local largePoints = 50local losePoints = 100-- Các dịch vụ cần thiếtlocal Players = game:GetService("Players")
Hàm và sự kiện
PointsScript sẽ cần hai chức năng. Chức năng đầu tiên sẽ cho và lấy các bộ phận. Chức năng thứ hai sẽ kiểm tra nếu một người chạm vào bộ phận đó. Các chức năng này sẽ sau đó được kết nối với một sự kiểm tra chạm, chạy mỗi khi bộ phận đó được chạm.
Tạo một chức năng mới có tên là givePoints() và một biến đổi tên là player . Bên trong, thêm một câu chuyển dữ liệu để sử dụng cho mục kiểm tra.
local Players = game:GetService("Players")-- Cộng hoặc trừ điểmlocal function givePoints(player)print("Giving player points")endDưới đó, tạo một chức năng thứ hai tên là partTouched() với một biến tùy chỉnh tên là otherPart .
-- Cộng hoặc trừ điểmlocal function givePoints(player)print("Giving player points")end-- Kiểm tra xem người chơi đã chạm vào bộ phận nào khônglocal function partTouched(otherPart)endTrong chức năng, sử dụng chức năng GetPlayerFromCharacter() để kiểm tra có phải có người chơi trong biến đổng đối tượng khác.
-- Kiểm tra xem người chơi đã chạm vào bộ phận nào khônglocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endNếu một người chạm vào bộ phận, nó sẽ được lưu trong biến người chơi. Nếu không, biến sẽ ở trong trống. Trên cá sở hữucủa bạn:
- Trong hàm, kiểm tra xem người chơi có giá trị không. Nếu có, thì gọi givePoints(player) .
- Dưới chức năng, kết nối partTouched() với sự kiện pointPart đã được chạm.
-- Kiểm tra xem người chơi đã chạm vào bộ phận nào khônglocal function partTouched(otherPart)-- Nhận người chơi nếu một người chạm vào bộ phậnlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)Chạy dự án. Mỗi khi một người chạm vào bộ phận, bạn nên thấy một thông điệp trong Cửa sổ Ra mắt nói: "Giving player points" Mẹo giải quyết vấn đề:
- Kiểm tra rằng "Players" ở trong game:GetService("Players") được viết hoa và dấu chấm câu.
- partTouched() nên kết nối với sự kiện Touched của điểm.
Tạo màu lặp
Để lặp qua các màu, script sẽ sử dụng một while = loop that changes the part's color every few seconds. Điều kiện cho loop này sẽ đúng, so it can run indefinitely.
Ở cuối của script, tạo một lần lượt mới trong đó điều kiện là đúng, có nghĩa là lần lượt luôn luôn chạy.
-- Kiểm tra xem người chơi đã chạm vào bộ phận nào khônglocal function partTouched(otherPart)-- Nhận người chơi nếu một người chạm vào bộ phậnlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- Lặp qua màuwhile true doendBằng cách chính sở hữu, code a while true do loop that changes pointPart to the color variables you've created. Đừng quên sử dụng task.wait() between colors. When finished, check your code against the version bên dưới.
-- Loops qua 3 màu, chờ đợi giữa mỗi màuwhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endChơi-kiểm tra và kiểm tra rằng tất cả ba màu lượt lại mà không bị gián đoạn.
Mẹo dịch vụ
Tại thời điểm này, nếu lỗ lặp màu không hoạt động như ý muốn, hãy thử một trong những lựa chọn dưới đây.
- Kiểm tra có phải lệnh while ở dưới cuối cùng của script, dưới sự kiểm soát của sự kiểm tra Touched . Nếu lệnh while không ở dưới, nó sẽ giữ các bộ phận khác của script không chạy đúng cách.
- Kiểm tra mỗi màu trong Color3.fromRGB() được viết đúng chính tả. Nó phải có ba số giữa 0 và 255 được phân cách bởi các dấu chấm câu, như (255, 50, 0) .
Đang đưa người chơi điểm
Người chơi sẽ nhận điểm dựa trên màu hiện tại của bộ phận khi họ chạm vào nó.
Tìm màu hiện tại
Mỗi khi một người chạm vào bộ phận, script sẽ cần biết màu hiện tại của bộ phận để sau đó trao điểm.
Tìm thấy givePoints() . Thay thế tin nhắn thử nghiệm của bạn bằng một biến cho màu hiện tại của pointPart. Biến này sẽ xác định số điểm mà người chơi nhận (hoặc mất).
local function givePoints(player)local currentColor = pointPart.ColorendĐể ảnh hưởng đến điểm của một người chơi, chức năng đó cần quyền truy cập vào bảng xếp hạng của người chơi. Tạo một biến để lưu nó.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endBây giờ thêm một biến để nhận giá trị Điểm của người chơi, là một con của bảng xếp hạng của họ.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
Cấp hoặc Giảm Điểm
Tiếp theo, bạn sẽ sử dụng if và else để cho hoặc trừ điểm tùy thuộc vào màu của bộ phận khi chạm. Hãy nhớ rằng blue cung cấp một số lượng nhỏ, green cung cấp nhiều và red subtracts points.
Trong givePoints() , dưới biến, sử dụng một if statement để kiểm tra màu hiện tại là xanh và nếu vậy thì thêm smallPoints vào giá trị điểm hiện tại của người chơi.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendĐể kiểm tra xanh, thêm một else if condition. If xanh, then add the largePoints variable to người chơi's points.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendSử dụng một câu nói khác để trừ điểm nếu điểmPart không màu xanh hoặc màu xanh lá cây.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendCuối cùng, phá hủy phần sau câu if để khiến cho script không thể tiếp tục đưa ra các điểm.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()Chơi thử và kiểm tra rằng mỗi màu cho điểm như mong đợi. Hãy chắc chắn để kiểm tra tất cả các điều kiện ba .
Đang cho người chơi phản hồi
The PointPart hoạt động, nhưng người chơi có thể không nhận thấy một cái gì đó xảy ra trừ khi họ nhìn vào bảng xếp hạng của họ. Sửa điều đó bằng cách tạo ra các hạt khi PointPart bị phá hủy.
Thêm phản hồi khi người chơi sử dụng một phần, chẳng hạn như âm thanh, rung hoặc hạt, làm cho các tương tác với các thống kê dễ hơn cho người chơi.
Tạo hiệu ứng hạt nhân
Hiệu ứng hạt nhân sẽ có màu tương tự như bộ phận khi chạm. Vì màu sắc đã được lưu trong biến, nên dễ dàng tái sử dụng chúng.
Ở dưới, tạo một givePoints() mới. Đảm bảo tên instream được viết chính xác như đã cho thấy.
local particle = Instance.new("ParticleEmitter")endParticleEmitter sử dụng chuỗi màu để điều khiển màu của chúng. Tạo một màu mới và truyền màu hiện tại của bộ phận.
-- Phá hủy bộ phậnpointPart:Destroy()-- Tạo hạtlocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)Hạt sẽ cần phải được gắn vào người chơi đã chạm vào nó. Tạo một biến để lấy mô hình Nhân vật của người chơi. Sau đó, gắn hạt vào đầu người chơi.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")Sử dụng task.wait() cho một giây nữa, sau đó tiêu diệt các hạt.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()Thử nghiệm trò chơi và đảm bảo các hạt nhỏ theo người chơi sau khi chạm vào mỗi màu.
Mẹo dịch vụ
Tại thời điểm này, nếu các hạt không hoạt động như ý muốn, hãy thử một trong những lựa chọn dưới đây.
- Làm khi tạo một mô hình mới mà ParticleEmitter được viết chính xác như đã cho thấy và bên trong những dấu chấm câu.
- Khi làm cha của các hạt, hãy chắc chắn sử dụng : giữa playerCharacter và WaitForChild() mà không có khoảng cách giữa.
Hoàn tất PointScript
Một phiên bản hoàn thành của script có thể được tham khảo ở dưới đây.
local pointPart = script.Parent
--lưu trữ địa phương = trò chơi:GetService("ServerStorage")
-- Đưa ra một số điểm
local blue = Color3.fromRGB(0, 0, 255)
-- Đưa thêm điểm
local green = Color3.fromRGB(0, 255, 0)
-- Khiến người chơi mất điểm
local red = Color3.fromRGB(255, 0, 0)
-- vàng được đưa cho người chơi
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")
-- Tặng người chơi vàng dựa trên màu của bộ phận
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Phá hủy bộ phận, đợi một giây và sau đó phá hủy hạt
pointPart:Destroy()
-- Tạo ra một hiệu ứng lấp lánh và tiêu diệt nó
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)
-- Đổi màu của bộ phận dựa trên biến. Cần phải ở dưới cùng của script.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end