보드
Coddy의 Roblox 게임: 끝없는 타워 코스 레슨. 18개 중 11번째.
장애물 코스는 라운드제로 진행됩니다. 로비에서 잠시 기다린 다음 새로운 타워가 나타나고 꼭대기까지 달리기를 시작합니다. 플레이어가 상황을 볼 수 있도록 로비에는 스폰 지점을 향해 있는 평평한 파트인 Board가 있습니다.
파트 위의 텍스트는 SurfaceGui에 TextLabel을 넣어 표시합니다. UDim2.fromScale(1, 1)은 라벨이 면 전체를 채우게 하고, TextScaled는 텍스트 크기를 맞게 조정합니다:
local gui = Instance.new("SurfaceGui")
gui.Parent = workspace.Lobby.Board
local label = Instance.new("TextLabel")
label.Size = UDim2.fromScale(1, 1)
label.TextScaled = true
label.Text = "Endless Tower"
label.Parent = gui카운트다운은 -1 간격으로 거꾸로 세며, 매번 1초씩 기다리는 for 루프입니다:
for i = 5, 1, -1 do
setBoard("Next tower in " .. i)
task.wait(1)
end챌린지
중급workspace.Lobby.Board에 SurfaceGui를 넣고, 이를 채우며 TextScaled가 켜져 있고 어두운 배경에 흰색 텍스트가 표시되는Status라는 이름의 TextLabel을 추가하세요.- 레이블의 Text를 설정하는
setBoard(text)를 작성하세요. - 타워를 만들기 전에
Settings.Intermission부터 1까지 카운트다운을 표시하세요.Next tower in 3,Next tower in 2...을 보여 주고, 매번 1초씩 기다립니다. 그런 다음 이전과 같이 타워를 만들고 용암을 시작하세요.
플레이를 누르고 게시판을 확인하세요. 그런 다음 확인을 누르세요.
직접 해보기
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local Settings = require(game.ReplicatedStorage.Settings)
local stages = ServerStorage.Stages
local tower = nil
local lava = nil
print("Each tower has " .. Settings.StageCount .. " stages")
-- 모든 플레이어는 리더보드에 Wins를 받습니다
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local wins = Instance.new("IntValue")
wins.Name = "Wins"
wins.Parent = leaderstats
end)
-- Kill 태그가 붙은 것에 닿으면 생명을 잃습니다
local function killOnTouch(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- 사라지는 발판은 누군가 밟으면 잠시 후 희미해졌다가 다시 나타납니다
local function makeVanish(part)
part.Touched:Connect(function(hit)
if part:GetAttribute("Gone") or not hit.Parent:FindFirstChild("Humanoid") then
return
end
part:SetAttribute("Gone", true)
task.wait(Settings.VanishDelay)
part.Transparency = 0.8
part.CanCollide = false
task.wait(Settings.VanishTime)
part.Transparency = 0
part.CanCollide = true
part:SetAttribute("Gone", nil)
end)
end
-- 레이저는 Slide 오프셋까지 미끄러졌다가 돌아오기를 계속 반복합니다
local function makeSlide(part)
local info = TweenInfo.new(Settings.SlideTime, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, -1, true)
local goal = { Position = part.Position + part:GetAttribute("Slide") }
TweenService:Create(part, info, goal):Play()
end
-- 점프 패드는 밟은 사람을 공중으로 튕겨 올립니다
local function bounce(hit)
local root = hit.Parent:FindFirstChild("HumanoidRootPart")
if root then
root.AssemblyLinearVelocity = Vector3.new(0, Settings.BouncePower, 0)
end
end
-- 회전 장애물은 매 프레임 조금씩 회전합니다
RunService.Heartbeat:Connect(function(dt)
for _, spinner in CollectionService:GetTagged("Spinner") do
if spinner:IsDescendantOf(workspace) then
spinner:PivotTo(spinner:GetPivot() * CFrame.Angles(0, math.rad(Settings.SpinSpeed) * dt, 0))
end
end
end)
-- 태그에 따라 스테이지의 모든 장애물을 활성화합니다
local function setupStage(stage)
for _, part in stage:GetDescendants() do
if part:HasTag("Kill") then
part.Touched:Connect(killOnTouch)
end
if part:HasTag("Vanish") then
makeVanish(part)
end
if part:HasTag("Conveyor") then
part.AssemblyLinearVelocity = part.CFrame.LookVector * Settings.BeltSpeed
end
if part:HasTag("Slider") then
makeSlide(part)
end
if part:HasTag("Bounce") then
part.Touched:Connect(bounce)
end
end
end
-- 스테이지 하나를 무작위로 선택합니다
local function pickStage()
local all = stages:GetChildren()
return all[math.random(1, #all)]
end
-- 모델의 복사본을 탑 위에 놓고, 복사본과 새로운 꼭대기 높이를 반환합니다
local function stack(template, bottom)
local copy = template:Clone()
local box, size = copy:GetBoundingBox()
local lift = bottom - (box.Position.Y - size.Y / 2)
copy:PivotTo(copy:GetPivot() + Vector3.new(0, lift, 0))
copy.Parent = tower
return copy, bottom + size.Y
end
-- 새로운 무작위 탑을 아래부터 쌓아 올립니다
local function buildTower()
tower = Instance.new("Model")
tower.Name = "Tower"
tower.Parent = workspace
local top = 0
for i = 1, Settings.StageCount do
local stage, newTop = stack(pickStage(), top)
top = newTop
setupStage(stage)
end
stack(ServerStorage.Finish, top)
return top
end
-- 용암은 지면에서 탑 꼭대기 바로 아래까지 상승합니다
local function startLava(top)
lava = Instance.new("Part")
lava.Name = "Lava"
lava.Anchored = true
lava.CanCollide = false
lava.Size = Vector3.new(30, 2, 30)
lava.Position = Vector3.new(0, -2, 0)
lava.Color = Color3.fromRGB(255, 90, 20)
lava.Material = Enum.Material.Neon
lava.Parent = workspace
lava.Touched:Connect(killOnTouch)
local info = TweenInfo.new(top / Settings.LavaSpeed, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, 0, false, Settings.LavaDelay)
TweenService:Create(lava, info, { Position = Vector3.new(0, top - 2, 0) }):Play()
end
local top = buildTower()
startLava(top)
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.