이 프로젝트는 조건부 문을 사용하여 부품에 색상을 지정하여 순위표에 포인트를 더하거나 뺍니다. 파란색인 경우 플레이어에게 몇 가지 점을 제공합니다. 녹색인 경우 많은 점을 제공합니다. 마지막으로, 빨간색인 경우 포인트를 제거합니다.
프로젝트 설정
포인트가 관련된 프로젝트에 포인트 부여 부분을 추가할 수 있습니다. 예를 인스턴스, 플레이어가 포인트를 수집하는 모험 게임입니다.
포인트 추적
이 프로젝트를 설정하려면 포인트 추적 및 색상 변경 부품이 있는 리더보드가 필요합니다. 리더보드에 대한 코드가 제공됩니다.
서버스크립트서비스의 새 스크립트를 생성합니다. 스크립트에 코드를 복사하여 스크립트에 붙여넣습니다.
--In ServerScriptService, 다음과 같은 콘텐츠로 PlayerSetup라는 이름의 스크립트를 생성합니다.local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- IntValue의 예local points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- PlayerAdded 이벤트가 발생했을 때 실행하십시오.Players.PlayerAdded:Connect(onPlayerJoin)
색이 변하는 부품
스크립트는 부품에 대해 세 가지 색을 통과합니다. 각 색에는 RGB 값을 저장할 변수가 있으며, 색을 만드는 데 사용되는 3개의 숫자(빨간색, 녹색, 파란색)가 포함된 데이터 형식입니다.
부분을 이름이 PointScript인 부착식 스크립트로 만듭니다.
In 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
플레이어 서비스 추가
포인트를 부여하려면 플레이어의 정보에 액세스해야 하며 플레이어 탭에 있는 캐릭터 개체와 별도입니다. 여기에는 순위표 통계와 같은 정보가 있습니다.
이를 위해 스크립트에 플레이어 서비스를 추가하십시오. 서비스는 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() 를 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") 에 있는 Players를 확인하십시오.
- partTouched() 는(가) 포인트파트의 이벤트 Touched 에 연결되어야 합니다.
루프 색상 생성
색을 반복하려면 스크립트는 몇 초마다 부품의 색을 변경하는 while = 루프를 사용합니다. 이 루프의 조건은 사실이므로 이 루프는 무한히 실행할 수 있습니다.
스크립트 끝에 조건이 참인 경우 새로운 루프를 만들고 루프가 항상 실행되도록 합니다.
-- 플레이어가 부품을 만진지 확인합니다.local function partTouched(otherPart)-- 부품을 만진 플레이어를 가져옵니다.local player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- 색을 통해 루프while true doend보유코드로, 점을 생성한 색 변수로 변경하는 루프 코드를 작성합니다. 색 변수 사이에 사용하는 task.wait() 을 잊지 마십시오. 완료되면 코드를 버전 아래에서 확인합니다.
-- 3 색을 거친 루프, 각 색 사이를 기다리는while true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)end모든 세 색상 루프를 중지하지 않고 플레이 테스트하고 확인하십시오.
문제 해결 팁
이 시점에서 색 루프가 원하는 대로 작동하지 않으면 다음 중 하나를 시도해 보세요.
- 스크립트의 하단에 있는 반환 이벤트 아래에 루프가 있는지 확인하십시오. 루프가 하단에 있지 않으면 스크립트의 다른 부분이 올바르게 실행되지 않습니다.
- 내부적으로 색상이 Color3.fromRGB() 안에 올바르게 작성되었는지 확인하십시오. 쉼표로 구분된 0과 255 사이에 세 자릿수가 있어야 합니다. 예를 들어, (255, 50, 0) 입니다.
플레이어에게 포인트 주기
플레이어는 부품을 만질 때 현재 부품의 색에 따라 포인트를 받습니다.
현재 색 찾기
플레이어가 부품을 만질 때마다 스크립트는 나중에 포인트를 할당하려면 부품의 현재 색상을 알아야 합니다.
Find givePoints() . 테스트 메시지를 현재 포인트 부품의 색과 교체하십시오. 이 변수는 플레이어가 얻는 (또는 잃는) 포인트의 수를 결정합니다.
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와 elif를 사용하여 부품의 색상에 따라 점을 더하거나 뺍니다. 색상이 파란색인 경우 작은 값을 제공하고, 녹색은 많이 제공하고, 빨간색은 뺍니다.
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 += largePointsendBlue 또는 Green이 아닌 경우 다른 문을 사용하여 포인트를 뺍니다.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsend마지막으로, destroy 부품 후에 문을 닫아서 스크립트가 포인트를 계속 제공할 수 없도록 합니다.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()모든 색상이 예상대로 포인트를 제공하는지 확인하십시오. 모든 세 조건을 테스트하십시오.
플레이어에게 피드백 주기
포인트 부품은 작동하지만 플레이어는 자신의 리더보드보지 않고 무언가가 발생하지 않은 경우 알 수 없습니다. 포인트 부품이 파괴된 때 입자를 만들어 해결하십시오.
플레이어가 부품, 예를 들어 음, 진동 또는 입자를 사용할 때 피드백을 추가하면 플레이어가 개체와 상호 작용하는 것을 더 만족시킵니다.
입자 효과 생성
입자 효과는 부품을 만질 때 부품과 동일한 색상이 됩니다. 색상이 변수에 저장되어 있기 때문에 쉽게 재사용할 수 있습니다.
In givePoints() at the bottom, create a new ParticleEmitter 인스턴스. Make sure the instance name is spelled exactly as shown.
local particle = Instance.new("ParticleEmitter")endParticleEmitter는 색상 속성을 제어하기 위해 색 시퀀스를 사용합니다. 새로운 색 시퀀스를 생성하고 현재 부품 색상을 전달하십시오.
-- 부품 파괴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() 사이에 공백이 없습니다.
포인트 스크립트 완료
스크립트의 완성된 버전은 아래에서 참조할 수 있습니다.
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