현재 플레이어는 어떤 플랫폼에서도 아무 결과 없이 떨어질 수 있습니다. 이 섹션에서는 게임의 수위와 같은 높이에 큰 보이지 않는 위험 요소를 만드는 방법을 안내합니다. 플레이어가 위험 요소에 떨어지면, 그들의 건강이 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라는 이름의 스크립트를 만들고 다음 코드를 추가합니다.```lualocal 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```
HazardService는 CoinService와 많은 유사점이 있습니다. 그러나, 플레이어가 동전을 수집하는 대신, 위험 요소에 닿을 때 플레이어의 정원이 0으로 설정됩니다.
게임 내에서 위험 요소 객체를 수정하거나 추가하거나 제거하여 독특한 장애물을 만들 수 있습니다. Hazards 폴더에 포함되어 있는 한, 코드 루프는 모든 위험 요소에 이벤트 핸들러를 연결합니다.
플레이어 생명 주기와 연결하기
플레이어 생명 주기는 플레이어가 게임에서 상호작용할 때 발생하는 이벤트, 즉 참여, 퇴장 또는 재생성 등을 나타냅니다. 이러한 이벤트에 핸들러를 연결하여 각 주요 생명 주기 이벤트에 대한 로직을 실행해야 합니다.
CoinService에 생명 주기 핸들러 추가하기ServerScriptService에서 기존 CoinService 스크립트의 하단에 다음 코드를 추가합니다 (기존 코드는 교체하지 마십시오 — 그 뒤에 추가합니다).```lualocal function onPlayerAdded(player)-- 플레이어의 코인을 0으로 초기화updatePlayerCoins(player, function(_)return 0end)player.CharacterAdded:Connect(function(character)-- WaitForChild는 플레이어 루프를 중단시키므로 아래는 별도의 스레드에서 수행되어야 합니다.task.spawn(function()-- 플레이어가 죽을 때character:WaitForChild("Humanoid").Died:Connect(function()-- 플레이어의 코인을 0으로 초기화updatePlayerCoins(player, function(_)return 0end)end)end)end)end-- PlayerAdded 이벤트와 연결하기 전에 추가된 플레이어 초기화for _, player in Players:GetPlayers() doonPlayerAdded(player)endlocal function onPlayerRemoved(player)updatePlayerCoins(player, function(_)return nilend)endPlayers.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으로 재설정됩니다.