Menu
CoddyTech

열쇠와 자물쇠

Coddy의 Roblox 게임: 어둠에서 탈출하기 코스 레슨. 20개 중 8번째.

일부 방은 잠겨 있습니다(Locked 템플릿). 이 방의 문에는 Locked 속성이 있고, 열쇠는 내부의 KeySpot에 있습니다. 열쇠는 Tool입니다. 프롬프트를 누르면 플레이어의 Backpack에 들어갑니다.

잠긴 문은 열쇠를 가지고 있는 플레이어만 열 수 있습니다. 열쇠는 손에 들고 있거나(캐릭터에 있거나) Backpack에 있어야 합니다. 문을 열면 열쇠를 사용합니다:

local key = findTool(player, "Key")
if not key then
	return
end
key:Destroy()
door:SetAttribute("Locked", nil)
challenge icon

챌린지

중급
  1. findTool(player, name)을 작성하세요. 도구는 플레이어의 캐릭터나 Backpack에 있습니다.
  2. addRoom에서 방에 KeySpot이 있으면 ServerStorage.Key의 복제본을 그곳에 놓으세요(key.Handle.CFrame = spot.CFrame로 설정하고 방을 부모로 지정). 해당 키의 Handle.Prompt는 비활성화되고 키는 플레이어의 Backpack으로 이동합니다.
  3. setupDoor에서 문이 열리기 전에 잠긴 문은 열쇠가 필요하며, 열쇠를 사용하고 Locked 속성을 제거합니다.

Play를 누르고 3번 방을 통과하세요. 그런 다음 Check를 누르세요.

직접 해보기

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

local rooms = workspace.Rooms
local lastRoom = rooms.Lobby -- 가장 최근에 생성된 방
local count = 0 -- 지금까지 생성된 방의 수

-- 밤이 찾아온다: 태양은 사라지고, 곳곳에 희미한 빛과 안개가 깔린다
Lighting.ClockTime = Settings.ClockTime
Lighting.Ambient = Settings.Ambient
Lighting.OutdoorAmbient = Settings.Ambient
Lighting.FogColor = Color3.new(0, 0, 0)
Lighting.FogEnd = Settings.FogEnd
print("Lights out")

-- 경첩을 축으로 문을 돌려 연다
local function openDoor(door)
	door:SetAttribute("Open", true)
	door.Panel.Prompt.Enabled = false
	local hinge, panel = door.Hinge, door.Panel
	local goal = hinge.CFrame * CFrame.Angles(0, math.rad(90), 0) * hinge.CFrame:ToObjectSpace(panel.CFrame)
	TweenService:Create(panel, TweenInfo.new(0.6), { CFrame = goal }):Play()
end

local addRoom -- 아래에서 정의됨: 문은 방을 추가하고, 방에는 문이 있다

-- 플레이어가 문을 열었을 때 문이 하는 일
local function setupDoor(door)
	door.Panel.Prompt.Triggered:Connect(function(player)
		if door:GetAttribute("Open") then
			return
		end
		if door.Parent == lastRoom then
			addRoom()
		end
		openDoor(door)
	end)
end
setupDoor(workspace.Rooms.Lobby.Door)

-- 방에 들어가면: 그 방이 플레이어의 Room이자 체크포인트가 된다
local function setupEntry(room)
	room.Entry.Touched:Connect(function(hit)
		local player = Players:GetPlayerFromCharacter(hit.Parent)
		if player then
			local number = room:GetAttribute("Number")
			player.leaderstats.Room.Value = number
			player.RespawnLocation = room.Checkpoint
		end
	end)
end
setupEntry(workspace.Rooms.Lobby)

-- 가장 최근에 생성된 방의 출구에 새 방을 만든다
function addRoom()
	count += 1
	local name = Settings.Order[(count - 1) % #Settings.Order + 1]
	if count >= Settings.RoomsToEscape then
		name = "Exit"
	end
	local room = ServerStorage.Rooms[name]:Clone()
	room:PivotTo(lastRoom.Exit.CFrame)
	room:SetAttribute("Number", count)
	room.Sign.SurfaceGui.Number.Text = "Room " .. count
	room.Parent = rooms
	lastRoom = room
	setupDoor(room.Door)
	setupEntry(room)
	-- 가장 최근에 생성된 방과 그 뒤의 KeepRooms개 방을 유지한다
	for _, old in rooms:GetChildren() do
		if old:GetAttribute("Number") < count - Settings.KeepRooms then
			old:Destroy()
		end
	end
	return room
end

-- 모든 플레이어: 리더보드에 Room을 표시하고, 부활할 때마다 손전등을 지급한다
Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local room = Instance.new("IntValue")
	room.Name = "Room"
	room.Parent = leaderstats

	player.CharacterAdded:Connect(function()
		local flashlight = ServerStorage.Flashlight:Clone()
		flashlight.Parent = player.Backpack
		local beam = flashlight.Handle.Beam
		flashlight.Activated:Connect(function()
			beam.Enabled = not beam.Enabled
		end)
	end)
end)
quiz icon실력 점검

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

Roblox 게임: 어둠에서 탈출하기의 모든 레슨