도어즈(Doors), 프레셔(Pressure), 더 미믹(The Mimic)에 이르기까지, 공포 장르는 현재 로블록스에서 가장 높은 유저 몰입도와 바이럴 파급력을 자랑하는 핵심 분야입니다. 로블록스 엔진은 인디 스탠드얼론 호러 게임을 능가하는 고품질의 심리적 서스펜스를 완벽히 구현해 냅니다.
하지만 플레이어의 뇌리에 각인되는 공포를 만들려면 단순한 괴성이나 어두운 복장만으로는 부족합니다. 정교한 길찾기(PathfindingService) 인공지능, 레이캐스팅 기반 시야 탐지, 심리적 긴장감을 고조시키는 Future 라이팅과 안개 설정, 박진감 넘치는 점프스케어 카메라 연출이 필수적입니다. 2026년 최신 개발 비결을 코드로 확인하세요.
1. 공포 분위기 연출: Future 라이팅과 입체 안개(Fog)
시각적 분위기는 공포 게임 몰입도의 70%를 결정합니다:
- Future 라이팅 기술 적용:
Lighting.Technology를 Future로 설정하여 젖은 바닥의 반사광, 손전등의 사실적인 그림자 원뿔을 구현합니다. - Atmosphere 볼륨 안개:
Lighting.Atmosphere의Density를 0.5 안팎으로 높이고Haze를 주어 시야를 제한함으로써 폐소공포증을 유도합니다. - 입체 공간 음향(Spatial Audio): 몬스터의 발소리와 신음소리는 맵 전체에 틀지 않고, 몬스터 본체에
Sound를 달아 거리와 방향을 귀로 감지할 수 있게 만듭니다.
2. 끈질긴 추적 몬스터 AI 코딩 (PathfindingService)
문과 장애물을 똑똑하게 우회하여 플레이어를 쫓는 서버 스크립트:
local PathfindingService = game:GetService("PathfindingService")
local monster = script.Parent
local humanoid = monster:WaitForChild("Humanoid")
local root = monster:WaitForChild("HumanoidRootPart")
local function findNearestPlayer()
local nearestTorso, maxDist = nil, 80
for _, player in ipairs(game.Players:GetPlayers()) do
local char = player.Character
if char and char:FindFirstChild("HumanoidRootPart") and char.Humanoid.Health > 0 then
local dist = (char.HumanoidRootPart.Position - root.Position).Magnitude
if dist < maxDist then
nearestTorso = char.HumanoidRootPart
maxDist = dist
end
end
end
return nearestTorso
end
while task.wait(0.5) do
local target = findNearestPlayer()
if target then
local path = PathfindingService:CreatePath({
AgentRadius = 3,
AgentHeight = 6,
AgentCanJump = false
})
path:ComputeAsync(root.Position, target.Position)
if path.Status == Enum.PathStatus.Success then
local waypoints = path:GetWaypoints()
if waypoints[2] then
humanoid:MoveTo(waypoints[2].Position)
end
end
end
end
동작 원리: 0.5초마다 반경 80스터드 내에서 가장 가까운 생존 플레이어를 탐색하고, PathfindingService를 통해 벽과 문을 우회하는 최적의 경로 웨이포인트를 계산하여 순차 이동시킵니다.
3. 시야 레이캐스팅(Raycast)과 옷장 숨기 시스템
도어즈처럼 벽 뒤나 옷장(Locker)에 숨어 몬스터를 따돌리는 핵심 로직:
- 장애물 레이캐스트 검사: 몬스터 눈 위치에서 플레이어 머리 방향으로
workspace:Raycast()를 발사합니다. 사이에 벽이나 문이 먼저 걸리면 시야를 상실합니다. - 옷장 숨기 속성(Attribute): 플레이어가 옷장에 들어가면
player:SetAttribute("IsHidden", true)로 설정하여 몬스터의 타깃 탐색 대상에서 즉시 제외합니다. - 숨죽이기 미니게임: 옷장 안에서 심장 박동 타이밍에 맞춰 버튼을 누르는 미니게임을 부여하여 긴박감을 극대화합니다.
4. 뇌리에 박히는 강렬한 점프스케어 연출법
불쾌한 소음 폭탄이 아닌, 전율을 주는 점프스케어 테크닉:
- TweenService 카메라 강제 시점: LocalScript에서 플레이어 카메라를 Scriptable로 전환하고, 몬스터의 섬뜩한 얼굴 정면으로 CFrame을 0.8초간 강제 트윈시킵니다.
- 저주파 진동 + 고주파 금속성 사운드: 40Hz 이하의 서브 베이스 진동과 찢어지는 고주파 사운드를 교차시켜 신체적 깜짝 놀람 반응을 유도합니다.
- 카타르시스 완충 구역: 강렬한 교전 후에는 20초간 안전하고 밝은 방을 배치하여 자율신경계를 이완시켜 줍니다.
5. 멀티플레이 협동 공포: 인원수 비례 공포 스케일링
프레셔처럼 다수가 함께 플레이할 때 공포를 극대화하는 멀티플레이 장치:
- 강제 고립 기믹: 문이 닫히며 2인 1조로 강제 분리되거나, 한 명은 통제실에서 카메라를 보고 다른 한 명은 어둠 속을 전진하는 협동 퍼즐을 설계합니다.
- 자원 희소성 공유: 손전등 배터리와 열쇠 수량을 제한하여 음성 채팅을 통한 소통을 강제합니다.
- 개인 맞춤형 환각 연출: 특정 플레이어의 클라이언트에만 보이는 유령 객체를 띄워 플레이어 간 불신과 공황을 조성합니다.
나의 심리적 침착도와 반사신경 측정하기
공포와 긴장감 속에서 나는 침착함을 유지할 수 있을까요? 밀리초 반응속도 테스트와 스트레스 진단으로 내면의 통제력을 시험해 보세요.
무료 스트레스 및 반응속도 테스트자주 묻는 질문 (FAQ)
몬스터가 벽을 뚫고 지나가는 버그는 어떻게 고치나요?
모든 벽 오브젝트의 CanCollide가 true인지 확인하고, PathfindingService의 AgentRadius를 몬스터의 실제 히트박스보다 약간 크게 설정하여 경로가 벽에 너무 붙지 않게 합니다.
1인 개발자도 도어즈 같은 퀄리티의 공포 게임을 만들 수 있나요?
충분히 가능합니다! 도어즈 역시 소규모 팀에서 시작되었습니다. 방 생성의 모듈화와 조명 연출이 핵심입니다.
플레이어 손전등을 렉 없이 최적화하려면 어떻게 해야 하나요?
서버가 아닌 클라이언트(LocalScript)에서 손전등 SpotLight를 장착하고, 각도를 60도, 밝기를 2.5 안팎으로 맞춰 프레임 저하를 방지합니다.
도어즈처럼 무한히 방이 랜덤 생성되는 원리는 무엇인가요?
ServerStorage에 템플릿 방들을 저장해 두고, 플레이어가 N번 문을 열 때 다음 방을 복제하여 입구 CFrame을 이전 문의 출구 CFrame에 맞춘 뒤, 지나온 방을 순차 삭제(Destroy)하는 방식입니다.