Skip to content
1 / 5
Lesson 01 of 05

Sightlines & Landmarks

Players never get lost in a space with strong landmarks and clear sightlines.

Every great level has: a visible goal, intermediate landmarks, protected sightlines, and pacing beats.

Walk through your space in first-person. If you don't know where to go within 3 seconds, the design is failing.

The rule of thirds for landmark placement: never put the destination dead-center. Place it at a 1/3 offset so the journey tells a story. Use the rule of seven — at any point in the map, the player should be able to see at least one of the seven key landmarks.

Sightlines are paths where the player can see a destination before they reach it — they create anticipation and curiosity.

luau
1-- Sightline validation tool
2local function hasSightline(from: Vector3, to: Vector3): (boolean, string)
3 local dir = to - from
4 local result = workspace:Raycast(from + dir.Unit * 2, dir)
5 if result then
6 return false, 'Blocked by: ' .. result.Instance.Name
7 end
8 return true, 'Clear (' .. math.floor(dir.Magnitude) .. ' studs)'
9end
10
11-- Test all spawn points against the main landmark
12local landmark = workspace.MainLandmark.PrimaryPart
13for _, spawn in ipairs(workspace.SpawnLocations:GetChildren()) do
14 local playerEye = spawn.Position + Vector3.new(0, 5.5, 0)
15 local clear, msg = hasSightline(playerEye, landmark.Position)
16 print(spawn.Name .. ' -> Landmark:', msg)
17end
READY · 17 lines