Menu
CoddyTech

불어나는 홍수

Coddy의 Roblox 게임: 재난 생존 코스 레슨. 18개 중 10번째.

첫 번째 재난을 만들 차례입니다. 게임에는 여러 재난이 있으므로, 하나의 테이블에 넣고 각 재난은 맵을 인수로 받는 함수로 만듭니다. 테이블에 저장된 함수도 다른 함수와 마찬가지로 호출합니다:

local Disasters = {}

function Disasters.Flood(map)
	-- 물을 만들고 수위를 높인다
end

Disasters.Flood(map)

홍수는 섬 아래에서 시작해 위로 솟아오르는 넓고 파란 파트입니다. 하지만 맨 위까지 올라오지는 않습니다. Island의 바위와 Rooftops의 지붕은 물에 잠기지 않으므로, 제때 올라간 플레이어는 살아남습니다. 누구도 살아남을 수 없는 재난은 게임이 아닙니다. TweenService는 시간이 지나면서 속성을 부드럽게 바꿉니다. 얼마나 걸릴지는 TweenInfo로 설명하고, 목표 값을 지정한 다음 Play를 실행합니다.

local rise = TweenInfo.new(12, Enum.EasingStyle.Linear)
TweenService:Create(water, rise, { Position = water.Position + Vector3.new(0, 8, 0) }):Play()

물이 플레이어를 떠받치면 안 되므로 CanCollide는 false로 설정하고 Anchored 상태를 유지합니다. 물에 닿은 대상을 처치하는 작업은 첫 번째 강좌에서 용암이 했던 것과 같습니다. 이 게임에서는 그 작업에 defeat(hit)라는 이름을 붙입니다. 모든 재난에서 이 함수를 사용하기 때문입니다.

물이 맵의 자식이 되도록 설정하세요. 그러면 라운드가 끝날 때 맵을 제거하면 물도 함께 제거됩니다.

challenge icon

챌린지

중급

홍수를 추가하세요:

  1. 맨 위에서 TweenService를 가져오세요.
  2. defeat(hit)를 작성하세요. hit.Parent에 Humanoid가 있으면 해당 Humanoid의 Health를 0으로 설정하세요.
  3. local Disasters = {}와 function Disasters.Flood(map)를 만드세요. 맵에 Water라는 이름의 파트를 만들고, 고정하고, CanCollide를 비활성화하고, 파란색에 반투명하게 설정하세요(Transparency 0.3). map.Base보다 양쪽으로 10 studs 더 넓게 하고, 그보다 2 studs 아래에서 시작하게 하세요. 닿으면 플레이어를 처치합니다. Settings.RoundLength * 0.8초 동안 일정한 속도(Enum.EasingStyle.Linear)로 Position을 8 studs 올리는 Tween을 실행하여 바위 꼭대기보다 아래에서 멈추게 하세요.
  4. 플레이어들을 순간 이동한 직후에 Disasters.Flood(map)를 호출하세요.

Play를 누르고 밀물과 경주하세요. 스폰 지점 왼쪽의 바위를 점프해서 올라가세요. 그런 다음 Check를 누르세요.

직접 해보기

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)

local lobbySpawn = workspace.LobbySpawn

print("Rounds last " .. Settings.RoundLength .. " seconds")

-- 모든 플레이어의 리더보드에 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)

-- 로비에 있는 상태 게시판
local gui = Instance.new("SurfaceGui")
gui.Parent = workspace.StatusBoard

local status = Instance.new("TextLabel")
status.Name = "Status"
status.Size = UDim2.fromScale(1, 1)
status.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
status.TextColor3 = Color3.fromRGB(255, 255, 255)
status.TextScaled = true
status.Text = "Welcome to Disaster Survival!"
status.Parent = gui

local function setStatus(text)
	status.Text = text
end

local function teleport(player, target)
	local character = player.Character
	if character then
		character:PivotTo(target.CFrame + Vector3.new(0, 4, 0))
	end
end

-- 라운드 반복문
while true do
	for seconds = Settings.Intermission, 1, -1 do
		setStatus("Intermission: " .. seconds)
		task.wait(1)
	end

	local map = ServerStorage.Maps.Island:Clone()
	map.Name = "Map"
	map.Parent = workspace

	local survivors = {}
	for _, player in Players:GetPlayers() do
		local character = player.Character
		if character and character.Humanoid.Health > 0 then
			teleport(player, map.Spawn)
			survivors[player] = true
			character.Humanoid.Died:Connect(function()
				survivors[player] = nil
			end)
		end
	end

	for seconds = Settings.RoundLength, 1, -1 do
		setStatus("Time left: " .. seconds)
		task.wait(1)
	end

	local names = {}
	for player in survivors do
		player.leaderstats.Wins.Value += 1
		teleport(player, lobbySpawn)
		table.insert(names, player.Name)
	end
	map:Destroy()
	if #names > 0 then
		setStatus("Winners: " .. table.concat(names, ", "))
	else
		setStatus("Nobody survived!")
	end
	task.wait(3)
end
quiz icon실력 점검

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

Roblox 게임: 재난 생존의 모든 레슨