위험 개체는 플레이어가 그들을 만질 때 플레이어의 체력을 줄여줍니다. 간단한 시작 지점으로, 이 튜토리얼의 이 섹션에서는 플레이어가 경험에서 물과 같은 수준의 큰 투명 부품을 만드는 방법을 가르쳐 플레이어의 체력을 0으로 변경하고 시작 지점으로 다시 부품
기본 물 위험 생성
기본 물 위험을 만들려면:
탐색기 창에서 새 폴더를 월드 폴더에 추가한 다음 이름을 위험으로 변경하십시오. 이름이 올바르게 스펠링되었는지 확인하려면 도전 폴더에 있는 이름을 확인하십시오.
위험 폴더에 있는 블록 부품을 삽입하고 위험 이름으로 변경합니다.
섬과 플랫폼 주위의 수선 라인을 덮기 위해 부품을 이동하고 크기를 조정합니다. 예를 들어, 섬 점프 - 스크립트 경험은 크기를 825, 1, 576 및 2>CFrame.Position2>로
부품을 선택한 다음 속성 창에서 다음 속성을 구성하여 위험이 보이지 않도록 하고 플레이어가 그것을 통과할 수 있도록 합니다.
- 투명도 1 로 설정합니다. 이렇게 하면 위험이 보이지 않아 실제 물이 위험인 것처럼 보입니다.
- CanCollide 를 사용하지 마십시오. 이는 엔진에 다른 부품이 위험을 방해하지 않고 통과할 수 있음을 알려줍니다. 이는 플레이어가 위험을 통과할 수 있음을 의미합니다.
- 앵커 활성화 . 이렇게 하면 엔진이 해당 물리 시뮬레이션으로 인해 위험의 위치를 변경하지 않도록 하고, 플레이어가 위험에 영향을 주지 않고 위험에 접근할 수 있습니다.
서버스크립트 서비스에서 스크립트를 생성한 다음 경고 서비스로 이름을 변경합니다.
다음 코드로 기본 코드를 대체합니다.
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으로 설정됩니다( 健康值을 ).
경험에서 위험 개체를 수정, 추가 또는 제거하여 고유한 장애물을 만들수 있습니다. 위험 폴더 내에 있는 한 코드 루프는 이벤트 처리기를 모든 위험에 연결합니다.
플레이어 수명 주기에 연결하십시오
플레이어 수명은 플레이어가 경험에 상호 작용할 때 발생하는 이벤트를 나타냅니다. 플레이어가 참여하거나 떠나거나 다시 생성하는 등의 이벤트입니다. 스크립트의 하단에 있는 다음 코드를 CoinService 스크립트에 복사하여 플레이어 수명의 각 주요 이벤트에 대해 로직을 적�
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)
코드는 적절한 수명 이벤트 동안 코인 카운트를 재설정하는 함수를 정의합니다.
- Player.PlayerAdded 는 플레이어가 경험에 참여할 때 발생하고 코인 수를 0 로 설정합니다.
- Player.CharacterAdded 는 플레이어의 캐릭터 모델이 세계에 추가되면 발생합니다. 이 이벤트는 PlayerAdded 및 플레이어가 재생성될 때마다 발생합니다.
- Humanoid.Died 는 플레이어가 죽을 때 발생하며, 코인 수를 0 로 설정합니다. task.spawn() 는 이를 처리하기 위해 별도의 스레드를 생성하므로 플레이어 라이프 사이클의 다른 측면이 실행될 수 있습니다.
- Player.PlayerRemoved 플레이어가 경험을 떠나면 플레이어 상태를 클리어하기 위해 발동됩니다.
- 이 코드에는 플레이어가 코인을 수집하고 Players.PlayerAdded 이벤트가 실행되기 전에 코인을 수집할 수 있는 잠재적 문제가 있습니다. 이 문제를 해결하려면 코드 예약 또는 플레이어의 캐릭터를 초기화할 때까지 솔루션을 자주 사용하는 등의 솔루션을
플레이테스트
플레이어 위험이 제대로 작동하는지 확인할 때입니다. 물에 닿으면 캐릭터가 죽고 코인을 잃어야 합니다. 게임을 테스트하려면:
메뉴 바에서 플레이 버튼을 클릭합니다. Studio가 플레이테스트 모드로 들어갑니다.
캐릭터를 이동하여 코인을 수집한 다음 물에 점프하십시오. 스크립트가 올바르게 작동하는 경우, 캐릭터는 死亡하고 순위표에있는 코인은 다시 0 으로 재설정됩니다.