위험 개체는 플레이어가 접촉할 때 플레이어의 체력을 감소시킵니다.간단한 시작 지점으로, 이 튜토리얼의 이 섹션은 경험의 물과 동일한 수준에서 큰 투명한 부품을 만드는 방법을 가르쳐 플레이어의 체력이 0으로 떨어지고 경험의 시작으로 재생성되도록 합니다.
기본 수질 위험 만들기
기본 수질 위험을 만들려면:
탐색기 창에서 새 폴더를 세계 폴더에 추가하고 이름을 위험으로 변경한 다음 다시 이름을 변경합니다.올바른 대/소문자로 이름이 올바르게 철자되었는지 확인하십시오. 그렇지 않으면 코드가 작동하지 않습니다.
위험 폴더에서 블록 부분을 삽입하고 이름을 위험 으로 변경합니다.
부품을 이동하고 크기를 조정하여 섬과 플랫폼 주변의 물 라인을 덮습니다.예를 들어, 샘플 섬 점프 - 스크립트 경험은 크기 를 825, 1, 576 및 CFrame.Position 을 174, -6.5, 38 설정합니다.
부품을 선택한 다음 속성 창에서 다음 속성을 구성하여 위험이 보이지 않고 플레이어가 바로 통과할 수 있도록 합니다.
- 투명도 를 1 설정합니다. 이렇게 하면 위험이 보이지 않아 실제 물이 위험인 것처럼 보입니다.
- 비활성화 CanCollide .이것은 엔진에 다른 부품이 중단되지 않고 위험을 통과할 수 있다는 것을 알려 플레이어가 위험을 통해 떨어질 수 있음을 의미합니다.
- 고정 활성화.이것은 엔진에 물리 관련 시뮬레이션으로 인해 위험의 위치가 결코 변경되지 않도록 지시하여 플레이어가 위치에 영향을 주지 않고 위험에 접근할 수 있음을 의미합니다.
Create a 스크립트 in ServerScriptService , then rename it to 위험 서비스 .
기본 코드를 다음 코드로 바꿉니다: replace the default code with the following code:
local Players = game:GetService("Players")local Workspace = game:GetService("Workspace")local hazardsFolder = Workspace.World.Hazardslocal hazards = hazardsFolder:GetChildren()local function onHazardTouched(otherPart)local character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player thenlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.Health = 0endendendfor _, hazard in hazards dohazard.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으로 재설정되는 잠재적 문제가 포함되어 있습니다.이 문제를 완화하려면 코드 일정 예약이나 플레이어의 캐릭터를 초기화할 때까지 동결과 같은 솔루션을 고려하십시오.그러나 이러한 솔루션은 이 자습서의 범위를 넘어서는 더 복잡한 스크립트 개념을 포함합니다.
플레이테스트
플레이어 위험이 의도한 대로 작동하는지 확인할 시간입니다. 물을 만질 때 캐릭터가 죽고 코인을 잃어야 합니다. 게임을 테스트하려면:
도구 모음에서 플레이 버튼을 클릭하십시오. Studio가 플레이테스트 모드로 들어갑니다.
캐릭터를 이동하여 코인을 수집한 다음 물에 점프합니다.스크립트가 올바르게 작동하면 캐릭터가 사망하고 리더보드의 코인 수가 0로 재설정됩니다.