열쇠와 자물쇠
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)챌린지
중급findTool(player, name)을 작성하세요. 도구는 플레이어의 캐릭터나 Backpack에 있습니다.addRoom에서 방에KeySpot이 있으면ServerStorage.Key의 복제본을 그곳에 놓으세요(key.Handle.CFrame = spot.CFrame로 설정하고 방을 부모로 지정). 해당 키의Handle.Prompt는 비활성화되고 키는 플레이어의 Backpack으로 이동합니다.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)
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.