플레이어 위험 생성

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


위험 개체는 플레이어가 접촉할 때 플레이어의 체력을 감소시킵니다.간단한 시작 지점으로, 이 튜토리얼의 이 섹션은 경험의 물과 동일한 수준에서 큰 투명한 부품을 만드는 방법을 가르쳐 플레이어의 체력이 0으로 떨어지고 경험의 시작으로 재생성되도록 합니다.

기본 수질 위험 만들기

기본 수질 위험을 만들려면:

  1. 탐색기 창에서 새 폴더를 세계 폴더에 추가하고 이름을 위험으로 변경한 다음 다시 이름을 변경합니다.올바른 대/소문자로 이름이 올바르게 철자되었는지 확인하십시오. 그렇지 않으면 코드가 작동하지 않습니다.

  2. 위험 폴더에서 블록 부분을 삽입하고 이름을 위험 으로 변경합니다.

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. 부품을 이동하고 크기를 조정하여 섬과 플랫폼 주변의 물 라인을 덮습니다.예를 들어, 샘플 섬 점프 - 스크립트 경험은 크기825, 1, 576CFrame.Position174, -6.5, 38 설정합니다.

    A far out view of all of the cylinder sea stacks and the island. A large block part covers the water where a player could land if they fell from a sea stack.
  4. 부품을 선택한 다음 속성 창에서 다음 속성을 구성하여 위험이 보이지 않고 플레이어가 바로 통과할 수 있도록 합니다.

    • 투명도1 설정합니다. 이렇게 하면 위험이 보이지 않아 실제 물이 위험인 것처럼 보입니다.
    • 비활성화 CanCollide .이것은 엔진에 다른 부품이 중단되지 않고 위험을 통과할 수 있다는 것을 알려 플레이어가 위험을 통해 떨어질 수 있음을 의미합니다.
    • 고정 활성화.이것은 엔진에 물리 관련 시뮬레이션으로 인해 위험의 위치가 결코 변경되지 않도록 지시하여 플레이어가 위치에 영향을 주지 않고 위험에 접근할 수 있음을 의미합니다.
  5. Create a 스크립트 in ServerScriptService , then rename it to 위험 서비스 .

  6. 기본 코드를 다음 코드로 바꿉니다: replace the default code with the following code:


    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

    위험 서비스코인 서비스 와 많은 유사점을 가지고 있습니다.그러나 코인을 수집하는 대신, 플레이어는 위험에 접촉할 때 체력을 0으로 설정합니다 .

    경험에서 위험 개체를 수정, 추가 또는 제거하여 독특한 장애물을 만들 수 있습니다.위험 폴더에 포함되어 있는 한, 코드 루프는 이벤트 처리기를 모든 위험에 연결합니다.

플레이어 수명 주기에 연결

플레이어 수명 주기는 플레이어가 경험에서 상호 작용할 때 발생하는 이벤트(예: 가입, 탈퇴 또는 재생성)를 나타냅니다.각 주요 라이프사이클 이벤트에 대해 적절하게 논리를 실행하려면 핸들러를 이 이벤트에 연결해야 합니다.코인 서비스 스크립트에서 코인 서비스 스크립트 맨 아래에 다음 코드를 복사하고 붙여넣습니다:


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
-- 플레이어가 연결되기 전에 추가된 모든 플레이어를 초기화합니다.Initialized any players added before connecting to PlayerAdded event
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)

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

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

플레이테스트

플레이어 위험이 의도한 대로 작동하는지 확인할 시간입니다. 물을 만질 때 캐릭터가 죽고 코인을 잃어야 합니다. 게임을 테스트하려면:

  1. 도구 모음에서 플레이 버튼을 클릭하십시오. Studio가 플레이테스트 모드로 들어갑니다.

    Play button highlighted in Studio's playtesting options.
  2. 캐릭터를 이동하여 코인을 수집한 다음 물에 점프합니다.스크립트가 올바르게 작동하면 캐릭터가 사망하고 리더보드의 코인 수가 0로 재설정됩니다.