플레이어 위험 요소 만들기

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.


현재 플레이어는 어떤 플랫폼에서도 아무 결과 없이 떨어질 수 있습니다. 이 섹션에서는 게임의 수위와 같은 높이에 큰 보이지 않는 위험 요소를 만드는 방법을 안내합니다. 플레이어가 위험 요소에 떨어지면, 그들의 건강이 0으로 줄어들고 게임의 시작 지점에서 다시 발생합니다.

기본 수위 위험 요소 만들기

기본 수위 위험 요소 만들기

Workspace > World에서 Hazards라는 새 폴더를 만듭니다.
Hazards 폴더 안에 Hazard라는 이름의 블록 Part를 만들고 Size를 825, 1, 576으로, CFrame.Position을 174, -6.5, 38로 설정하여 부품이 섬과 플랫폼 주변의 물을 덮도록 합니다.
투명도(Transparency)를 1로 설정하여 부품이 보이지 않게 하고 실제 물이 위험 요소로 보이도록 하며, CanCollide를 비활성화하여 플레이어가 그 부품을 통과해 물로 떨어지도록 하고, Anchored를 활성화하여 물리학이 그 부품을 움직이지 않도록 합니다.

플레이어가 위험 요소에 닿을 때 감지하기

위험 요소는 Touched를 수신하고 플레이어의 건강을 0으로 낮추는 스크립트를 작성할 때까지 아무 것도 하지 않습니다.

HazardService 만들기

ServerScriptService에서 HazardService라는 이름의 스크립트를 만들고 다음 코드를 추가합니다.
```lua
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local hazardsFolder = Workspace.World.Hazards
local hazards = hazardsFolder:GetChildren()
local function onHazardTouched(otherPart)
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
end
for _, hazard in hazards do
hazard.Touched:Connect(onHazardTouched)
end
```

HazardServiceCoinService와 많은 유사점이 있습니다. 그러나, 플레이어가 동전을 수집하는 대신, 위험 요소에 닿을 때 플레이어의 정원이 0으로 설정됩니다.

게임 내에서 위험 요소 객체를 수정하거나 추가하거나 제거하여 독특한 장애물을 만들 수 있습니다. Hazards 폴더에 포함되어 있는 한, 코드 루프는 모든 위험 요소에 이벤트 핸들러를 연결합니다.

플레이어 생명 주기와 연결하기

플레이어 생명 주기는 플레이어가 게임에서 상호작용할 때 발생하는 이벤트, 즉 참여, 퇴장 또는 재생성 등을 나타냅니다. 이러한 이벤트에 핸들러를 연결하여 각 주요 생명 주기 이벤트에 대한 로직을 실행해야 합니다.

CoinService에 생명 주기 핸들러 추가하기

ServerScriptService에서 기존 CoinService 스크립트의 하단에 다음 코드를 추가합니다 (기존 코드는 교체하지 마십시오 — 그 뒤에 추가합니다).
```lua
local function onPlayerAdded(player)
-- 플레이어의 코인을 0으로 초기화
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild는 플레이어 루프를 중단시키므로 아래는 별도의 스레드에서 수행되어야 합니다.
task.spawn(function()
-- 플레이어가 죽을 때
character:WaitForChild("Humanoid").Died:Connect(function()
-- 플레이어의 코인을 0으로 초기화
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- PlayerAdded 이벤트와 연결하기 전에 추가된 플레이어 초기화
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end
local function onPlayerRemoved(player)
updatePlayerCoins(player, function(_)
return nil
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoved)
```

코드는 적절한 생명 주기 이벤트 동안 코인 수를 초기화하는 함수를 정의합니다:

  • Players.PlayerAdded는 플레이어가 게임에 참여할 때 발생하며, 코인 수를 0으로 설정합니다.
  • Player.CharacterAdded는 플레이어의 캐릭터 모델이 세계에 추가될 때 발생합니다. 이것은 PlayerAdded 이후 그리고 플레이어가 재생성될 때마다 발생합니다.
  • Humanoid.Died는 플레이어가 죽을 때 발생하며, 코인 수를 0으로 설정합니다. task.spawn()은 이를 처리하기 위해 별도의 스레드를 생성하므로, 플레이어 생명 주기의 다른 측면이 실행될 수 있습니다.
  • Player.PlayerRemoved는 플레이어가 게임을 떠날 때 발생하며, 플레이어 상태를 정리합니다.
  • 이 코드는 플레이어가 Players.PlayerAdded 이벤트가 실행되기 전에 코인을 수집할 수 있는 가능성을 포함하고 있으며, 그 후 코인 수가 0으로 재설정됩니다. 이 문제를 완화하기 위해 코드 일정 계획이나 플레이어 캐릭터를 초기화가 끝날 때까지 동Freeze하는 것과 같은 해결 방법을 고려해 보십시오. 그러나 이러한 솔루션은 이 튜토리얼의 범위를 넘어서는 더 복잡한 스크립팅 개념을 포함합니다.

플레이 테스트

드롭다운에서 Test를 선택하고 Play를 클릭하세요. 몇 개의 동전을 수집한 후 물에 뛰어들어 보세요. 여러분의 캐릭터는 죽고 시작 지점에서 다시 발생하며, 코인 수는 0으로 재설정됩니다.

©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.