A platformer puzzle game where you traverse between the real world and a mirrored dimension with inverted physics.
Mirrorception challenges you to solve environmental puzzles by switching between two dimensions:
- Real World: The physical space with normal gravity and movement
- Mirrored World: A reflection with inverted physics — gravity may point in different directions, and the environment is transformed
- Mirror Traversal: Walk into mirrors and press SPACE to enter the reflected dimension
- Dimension Switching: Certain actions in one dimension affect the other — solve puzzles by thinking across both worlds
- Object Interaction: With gloves equipped, grab and move objects to alter both dimensions
- Ladders: Climb vertical structures to reach new areas
- Treasure Chests: Collect items that unlock new abilities
| Input | Action |
|---|---|
| WASD / Arrow Keys | Move |
| SPACE | Enter mirror / Interact (grab objects, open chests, climb ladders) |
| R | Reset level |
Mirrorception/
├── Demo/ # Unity project (built for Windows)
│ ├── Assets/
│ │ ├── Scenes/
│ │ │ ├── Prologue_1.unity # Tutorial level — basic mirror mechanics
│ │ │ ├── Prologue_2.unity # Introduces object interaction
│ │ │ └── Prologue_3.unity # Advanced puzzles
│ │ ├── Scripts/
│ │ │ ├── Player/
│ │ │ │ └── PlayerController.cs # Player movement and input
│ │ │ ├── GameSystem/
│ │ │ │ ├── GameSystem.cs # Base class for dimension switching
│ │ │ │ └── Prologue/ # Level-specific logic
│ │ │ ├── Objects/
│ │ │ │ ├── Mirror.cs # Mirror component
│ │ │ │ ├── grabbable objects/ # Physics objects
│ │ │ │ └── Ladder/ # Ladder mechanics
│ │ │ └── Graphics/
│ │ │ └── MirrorReflection.cs # Real-time reflection rendering
│ │ └── Shader/
│ │ ├── Mirror.shader # Custom mirror shader
│ │ └── showThrough.shader # X-ray vision effect
│ │
│ └── ProjectSettings/ # Unity configuration
└── README.md
The game uses a world-clone approach for dimension traversal:
- Entry: Player collides with a mirror surface (tagged
Mirror) - Animation: Player plays entry animation while position is interpolated
- World Clone: A new world instance is spawned at a calculated offset
- Rotation: The cloned world is rotated based on mirror orientation:
- Up-facing: 180° flip (gravity inverted)
- Side-facing: World mirrored horizontally
- Camera: Camera smoothly transitions to the new viewpoint
| Direction | Code | Effect |
|---|---|---|
| Up | U |
Gravity inverted, world flipped 180° |
| Down | D |
Gravity inverted |
| North | N |
Horizontal mirror |
| South | S |
Horizontal mirror |
| East | E |
Horizontal mirror |
| West | W |
Horizontal mirror |
GameSystem: Abstract base class handling dimension transitions, world cloning, camera movementPlayerController: Movement, collisions, object grabbing, ladder climbingMirror: Determines mirror orientation and provides data for dimension calculationsMirrorReflection: Handles real-time planar reflection rendering using frame buffers
The demo is built for Windows using Unity.
To build for other platforms, open Demo/ in Unity and configure platform settings in Edit > Build Settings.