Skip to content

Setup Guide — Secret / Illusory Wall

An illusory wall looks exactly like a solid wall but the player can walk through it. The wall can either dissolve visually when approached or remain invisible — showing no animation at all, just silently letting the party pass.

This guide covers two variants:

  • Proximity reveal — the wall dissolves when the party steps onto its cell (the most common classic dungeon secret).
  • Triggered reveal — a lever, button or other source dissolves the wall on demand.

A third case — a wall that is simply passable with no visual — needs no trigger setup at all and is described at the end.


How it works in the grid

Every wall in Dungeon Crawler Framework is registered as an EdgeBlocker in the grid data. For a wall to be physically passable the EdgeBlockerMarker on the wall GameObject must have Is Passable checked. This is separate from whether the wall is visible — visibility is controlled by the animator and mesh activation.

Dungeon Generator

Secret walls are placed from the Secret Wall Library panel in the Dungeon Generator. After placing one, run Generate Unique IDs (all walls) before exporting, so the wall gets a unique targetId the trigger system can reference.


Prefab hierarchy

SecretWall                ← root
├── WallMesh              ← wall geometry + Animator
└── (optional) Collider   ← physical collider, disabled when wall is passable

Both components that control the wall — WallCore and TriggerIllusoryWall — go on the root. Only one should be used at a time; choose based on which variant you need.


Variant A — Proximity reveal (WallCore + ProximityRevealBehaviour)

Use this when the wall should dissolve the moment the party steps onto the cell where the wall sits. No clicking required — they just walk through and the wall fades out behind them.

Step 1 — Add components to the root

Add these components to the SecretWall root:

EdgeBlockerMarker — registers the wall with the grid.

Field Value
Blocker Id Unique ID, e.g. wall_secret_01 (or let the Dungeon Generator assign it)
Is Passable ✅ Enabled — the party can always walk through, even before the reveal
Is Open Leave disabled

WallCore — the central wall controller. Runs the reveal/restore pipeline and drives the mesh and collider.

Field Value
Wall Mesh Drag the WallMesh child
Wall Collider Drag the collider on the root (if you have one)
Collides When Hidden Leave disabled — illusory walls should never block physical movement
Reveal Duration Match to the length of your dissolve animation, e.g. 0.5
Restore Duration Match to the restore animation, e.g. 0.5
Starts Revealed Leave disabled — wall starts hidden (solid-looking)

ProximityRevealBehaviour — listens to the grid's OnCellEntered event. When the party steps onto this wall's cell, it calls WallCore.Reveal().

Field Value
Permanent ✅ Enabled for a one-way secret (revealed forever). Disable if you want the wall to restore when the party steps back.

Step 2 — Set up the wall Animator

Select WallMesh and open its Animator Controller:

States
  Idle_Hidden     ← default (wall looks solid)
  Revealing       ← dissolve animation playing
  Idle_Revealed   ← wall invisible / fully dissolved
  Restoring       ← restore animation playing (only needed if Permanent = false)

Triggers
  Reveal
  Restore

Transitions:

  • Idle_Hidden → Revealing — trigger Reveal, no Exit Time, Transition Duration 0.
  • Revealing → Idle_Revealed — Exit Time on, Transition Duration 0.
  • Idle_Revealed → Restoring — trigger Restore, no Exit Time, Transition Duration 0. (Only if Permanent = false)
  • Restoring → Idle_Hidden — Exit Time on, Transition Duration 0. (Only if Permanent = false)

If your wall has no dissolve animation, you can leave the Animator empty and WallCore will simply show or hide the mesh after Reveal Duration seconds.

No animator needed

If you just want the wall to pop out of existence without any animation, skip the Animator entirely. Set Reveal Duration and Restore Duration to 0 on WallCore — the mesh hides immediately when the party steps through.


Variant B — Triggered reveal (TriggerIllusoryWall + source)

Use this when the wall is revealed by an explicit source — a lever in another room, a pressure plate, or a button. The party walks through only after the source has fired.

Step 1 — Add components to the root

EdgeBlockerMarker — same as Variant A, with Is Passable checked.

TriggerIllusoryWall — the target component for source-driven reveals.

Field Value
Blocker Id Unique ID matching the EdgeBlockerMarker
Wall Mesh Drag the WallMesh child
Wall Animator Drag the Animator from WallMesh
Reveal Anim Trigger Reveal
Restore Anim Trigger Restore
Dissolve Delay Seconds after the reveal trigger fires before the mesh is hidden completely. Match to the end of your dissolve animation.

Step 2 — Set up the Animator

Same states and transitions as Variant A.

Step 3 — Wire the source

On your lever, button or pressure plate, drag the TriggerIllusoryWall component from the wall root into the source's Targets list. When the source activates, the wall dissolves. When the source deactivates (lever pulled back, party steps off the plate), the wall restores — unless you want it to stay revealed permanently, in which case use a WallButton or PressurePlate with Latching enabled, or a lever that only ever fires once.


Variant C — Passable wall with no visual (fake solid)

The simplest case: the wall appears solid in the viewport but the player can just walk through with no animation, no dissolve, no trigger. Use this for hidden passages the player is simply meant to discover by bumping into walls.

Add only EdgeBlockerMarker to the root and check Is Passable. No WallCore, no TriggerIllusoryWall, no Animator. The grid will let the party through; the wall mesh stays visible forever.


Map behaviour

Secret cells — floor tiles marked as Secret in the Dungeon Generator — never appear on the dungeon map until the party physically walks onto them. Illusory walls themselves do not affect the map; what matters is the floor cell type on the other side.

If the room behind the secret wall uses regular floor tiles, it appears on the map as soon as the party enters. If those floor tiles are marked Secret, the room stays hidden on the map until explored.


Summary of components

Variant Root components
Proximity reveal EdgeBlockerMarker (Is Passable ✅), WallCore, ProximityRevealBehaviour
Triggered reveal EdgeBlockerMarker (Is Passable ✅), TriggerIllusoryWall
Fake solid (no visual) EdgeBlockerMarker (Is Passable ✅)

Dungeon Crawler Framework — Mantis3de