Menu
CoddyTech

코인 수집가

Coddy Lua 여정의 Roblox 게임 스크립팅 섹션에 포함된 레슨. 24개 중 15번째.

보물 패드는 Coins를 100으로 설정했습니다. 코인은 1을 더해야 하는데, 그러면 새로운 문제가 생깁니다.

Touched는 접촉하는 각 신체 부위마다 한 번씩 실행되므로, 코인 위에 한 발짝만 디뎌도 여러 번 실행될 수 있습니다. 매번 1점을 더하면 코인 하나로 여러 점을 얻게 됩니다.

해결 방법은 디바운스입니다. "이미 일어났음"을 기억해서 코드가 반복을 무시하도록 하는 변수입니다.

local used = false
button.Touched:Connect(function(hit)
	if not used then
		used = true
		print("Pressed!")
	end
end)

not used는 used가 false일 때 true이므로, 첫 번째 접촉만 if not used를 통과합니다. a and b는 둘 다 true일 때만 true입니다. 따라서 if player and not used then은 플레이어가 있고 코인이 아직 사용되지 않은 상태여야 합니다.

나중에 다시 실행되도록 하려면 기다린 다음 초기화합니다. task.wait(3) 다음에 used = false를 실행합니다. 기다리는 동안 일시 중지되는 것은 이 함수뿐이므로, 다른 접촉은 계속 들어오지만 used가 true인 동안 무시됩니다.

value += 1은 value = value + 1의 축약형이며, CanTouch = false로 설정하면 다시 true로 설정할 때까지 파트에서 Touched가 실행되지 않습니다.

challenge icon

챌린지

중급

leaderstats와 Touched 연결은 준비되었지만, Play를 누르고 동전을 통과해 보세요. Coins가 1보다 많이 증가합니다.

문제를 수정하고 동전 기능을 완성하세요.

  1. 동전 하나를 획득할 때마다 Coin이 정확히 1개씩 지급됩니다(동전마다 디바운스 적용).
  2. 획득한 동전은 숨겨집니다. Transparency는 1, CanTouch는 false입니다.
  3. 3초 후 다시 나타나며(Transparency는 0, CanTouch는 true), 다시 획득할 수 있습니다.

직접 해보기

local Players = game:GetService("Players")
local coins = workspace.Coins

Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local coinsValue = Instance.new("IntValue")
	coinsValue.Name = "Coins"
	coinsValue.Value = 0
	coinsValue.Parent = leaderstats
end)

for _, coin in coins:GetChildren() do
	coin.Touched:Connect(function(hit)
		local player = Players:GetPlayerFromCharacter(hit.Parent)
		if player then
			player.leaderstats.Coins.Value += 1
		end
	end)
end
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Roblox 게임 스크립팅의 모든 레슨

직접 연습해 보세요: 온라인 Lua 컴파일러