디바운스 패턴은 함수가 여러 번 실행되거나 입력이 여러 번 트리거되는 것을 방지하는 코딩 기술입니다. 다음 스크립트 시나리오는 디바운스를 모범 사례로 설명합니다.
충돌 감지
10의 피해를 입을 때 손상을 입히는 위험한 함정 부품을 생성하려면 기본적인 연결을 사용하여 연결하고 피해를 입은 플레이어와 같은 기능을 사용하여 다음과 같은 코드를 작성할 수 있습니다.
스크립트 - 플레이어에게 피해 주기
local part = script.Parent
local function damagePlayer(otherPart)
print(part.Name .. " collided with " .. otherPart.Name)
local humanoid = otherPart.Parent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health -= 10 -- 플레이어 체력 감소
end
end
part.Touched:Connect(damagePlayer)
논리적인 처음에는 테스트는 미묘한 물리적 충돌에 따라 Touched 이벤트가 여러 번 짧은 시간 내에 발생한다는 것을 보여줍니다.
피해를 과도하게 줬을 때 피해를 피하려면 인스턴스 특성을 통해 피해 대기 시간을 적용하는 리바운스 시스템을 추가할 수 있습니다.
스크립트 - 플레이어에게 피해를 입히는 디바운스 사용
local part = script.Parent
local RESET_TIME = 1
local function damagePlayer(otherPart)
print(part.Name .. " collided with " .. otherPart.Name)
local humanoid = otherPart.Parent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
if not part:GetAttribute("Touched") then
part:SetAttribute("Touched", true) -- 특성을 "진"으로 설정
humanoid.Health -= 10 -- 플레이어 체력 감소
task.wait(RESET_TIME) -- 초기화 기간 대기
part:SetAttribute("Touched", false) -- 특성 재설정
end
end
end
part.Touched:Connect(damagePlayer)
사운드 트리거
디바운스는 음향 효과, 예를 들어 두 부품이 충돌할 때 음향을 재생하거나 사용자가 음향 이벤트에 참여할 때 음향을 플레이하는 등의 작업을 수행할 때 유용합니다. 이 경우 <
사운드 중복을 방지하려면 IsPlaying 개체의 속성 Sound 을 사용하여 리바운스할 수 있습니다.
스크립트 - Debounce를 사용하여 충돌 사운드 플레이
local projectile = script.Parent
local function playSound()
-- 부품에서 자식 사운드 찾기
local sound = projectile:FindFirstChild("Impact")
-- 사운드가 플레이되지 않은 경우에만 사운드를 플레이하십시오
if sound and not sound.IsPlaying then
sound:Play()
end
end
projectile.Touched:Connect(playSound)
스크립트 - 재바운스 사용 버튼 클릭
local button = script.Parent
local function onButtonActivated()
-- 버튼에서 자식 사운드 찾기
local sound = button:FindFirstChild("Click")
-- 사운드가 플레이되지 않은 경우에만 사운드를 플레이하십시오
if sound and not sound.IsPlaying then
sound:Play()
end
end
button.Activated:Connect(onButtonActivated)
픽업 효과
경험에는 종종 의료 키트, 탄약 팩 등의 3D 세계에서 수집할 수 있는 픽업을 포함하지만, 이 픽업을 플레이어가 계속 가지고 다닐 수 있도록 디자인하면 픽업이 새로 고침되고 다시 활성화되기 전에 "쿨다운" 시간이 추가됩니다.
충돌 감지와 유사하게 충돌 감지 기능 , 당신은 인스턴스 특성으로 충돌 처리 를 관리하고 부품의 Transparency 를 변경하여 대기 시간을 시각화할 수 있습니다.
스크립트 - Debounce를 사용하여 체력 획득
local part = script.Parent
part.Anchored = true
part.CanCollide = false
local COOLDOWN_TIME = 5
local function healPlayer(otherPart)
local humanoid = otherPart.Parent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
if not part:GetAttribute("CoolingDown") then
part:SetAttribute("CoolingDown", true) -- 특성을 "진"으로 설정
humanoid.Health += 25 -- 플레이어 체력 증가
part.Transparency = 0.75 -- 주기 상태를 나타내려면 부품을 반투명으로 만듭니다.
task.wait(COOLDOWN_TIME) -- 쿨다운 기간 동안 대기
part.Transparency = 0 -- 부품을 완전히 불투명하게 하려면 부품을 재설정
part:SetAttribute("CoolingDown", false) -- 특성 재설정
end
end
end
part.Touched:Connect(healPlayer)