Candlelight Frights
Unity 3D Game by Sydney Heller
Portfolio: sydneyheller.org | LinkedIn: hellersydneyn | University of Notre Dame, May 2023 Graduate
Introduction
Ghosts are haunting this apartment! The residents have enlisted your help in expelling the ghosts. You must find and light a total of 13 candles across the apartment to send the ghosts away. Be on your guard though — these phantom foes do not welcome your presence, and they will fight to maintain control of the apartment!
Candlelight Frights
View a demo of in-progress gameplay.
(1) Task Management
I began by breaking down the project into tasks, assigning high priority to the assignment requirements, medium priority to additional gameplay mechanics, and low priority to aesthetic and fine-tuning considerations.
By completing only the high-priority tasks, my minimum viable product — now named Candlelight Frights — would possess at least 5 candles equipped with collider-based interactions and spread across 3 furnished rooms. The player would be able to walk from room to room, and gameplay would end after the player has collided with all 5 candles. A HUD would display how many candles the player still has to light, and the ESC key would allow the player to exit the game completely.
With the additional execution of the medium-priority tasks, Candlelight Frights would include ghosts spawning and attacking the player, raising the stakes and adding the possibility that the player could lose the game by running out of health. This would increase the complexity of the player’s controls/interactions and the scoring shown on the HUD.
Implementation of the low-priority tasks would enhance the mood and theme of Candlelight Frights and improve the overall experience for the player. I wanted my game to be spooky but not scary, which could be achieved through intentional choices in background music, ghost attack feedback, and strategic lighting.

Create a 3D game in Unity that meets the following minimum requirements:
-
3 or more rooms or constructed areas/environments
-
5 props per room/area
-
Interactions for the player (fly a plane, walk and jump, drive a car)
-
5 or more distance-based or collider-based interactions
-
Some type of scoring system on Heads Up Display (HUD)
-
Esc key ends game completely
☑ Add Esc key processing
☑ Add the 3D fps prefab to the scene
☑ Configure the apartment into only the rooms I want to use
☑ Create HUD display
☑ Candles lit/unlit for each room
☑ Health bar
☑ Program HUD behavior
☑ Find candle asset
☑ Create instances of working candles (at least 5)
☑ Instructions in World Space
☑ Find ghost asset
☑ Import ghost model into Unity
☑ Spawn ghost game objects
☑ Change typeface
☑ Music track
☑ Red overlay when attacked
☑ Dynamic ghost movement/attack speed
☑ Flickering lights outside the apartment
☑ Shut main apartment door and “trap” inside
☑ Disable Player movement when game concludes
(2) Finding Assets
I searched on the Unity Asset Store, Sketchfab, and Pixabay for the assets I wanted to use in Candlelight Frights.
For the game’s environment, I wanted a modern aesthetic that would not illicit fear in full or even dim lighting. In the Unity Asset Store, I initially searched for individual furniture pieces that I could arrange together in low-fidelity rooms. However, I was lucky enough to find the model of an entire apartment complex, complete with built-in FPS controls that allowed the user to open and close doors and drawers. Next, I searched for a candle that would have an otherworldly appearance, one that would contrast with the apartment setting and illuminate beautifully in the dim lighting.
Once I moved onto the medium-priority tasks, I looked on Sketchfab for a ghost model that I could import into Unity. The Fantasma model I chose had its own textures and materials, but I replaced them with the “glow” material used in the lights of the apartment package to achieve an illuminated. ghostly appearance in the dark.
After establishing the gameplay mechanics, I explored music files on Pixabay that would establish a spooky yet confident energy for the player. I am easily frightened and prefer to avoid the horror genre, so my choice of Sinister Night / Halloween Trap Hip Hop Music felt very appropriate for my game.
Assets Used: Apartment Kit, Modular Medieval Lanterns, Fantasma Ghost Phantom, and Sinister Night / Halloween Trap Hip Hop Music
Unity Asset Store
Apartment Kit and Candle assets
Sketchfab
Ghost asset
Pixabay
Background Music asset
(3) Unity Editor
With such a complete Apartment Kit asset, much of my work in the Unity Editor revolved around creating the HUD, placing the candles, and hiding Apartment Kit game objects in the hierarchy to minimize the processing power required. I also added instructions for the player in world space, and I adjusted the lighting levels to create a spooky ambience but still allow the player to see enough of the space around them.
(4) Code Review
Candlelight Frights is the only Unity 3D game I have developed, so I referenced a variety of resources including class notes, Unity documentation, and ChatGPT to script my desired game behavior. Scripts for moving the player and opening and closing doors were included in the Apartment Kit asset I found, so my focus was on the other game mechanics such as collisions, scoring, and NPCs. I ultimately created 5 scripts to control the various elements of Candlelight Frights — (1) GameController.cs, (2) DataDictionary.cs, (3) CandleController.cs, (4) GhostController.cs, and (5) GhostSpawner.cs.
ex. ChatGPT inquiry: “In Unity C#, I want to programmatically attach a 3D Box Collider to a game object, specify its size, and set it as a Trigger.”

GameController.cs contains methods for starting a new game, updating the text on the HUD, checking for the game’s end conditions, and flickering the lights outside the apartment.

DataDictionary.cs contains references to values that are referenced across multiple scripts, such as candle quantities and player health. This script also controls the visibility of the red panel that flashes when a ghost attacks the player.

CandleController.cs is attached to each candle instance. This script checks if the player collides with a candle, lights the candle upon collision, and updates the candle quantities in the HUD accordingly.

GhostController.cs is attached to each instance of a ghost after it is spawned by GhostSpawner.cs. This script controls ghost behavior, moving each ghost towards the player, attacking the player at regular intervals when in range of the player’s hitbox, and checking for the player’s counterattack with Spacebar input. GhostController.cs also updates the player’s health in the HUD every time a ghost attacks the player.

GhostSpawner.cs begins spawning instances of ghosts at random locations after the player passes through the entryway of the apartment. In this script, the ghost spawn rate is updated dynamically so ghosts spawn more frequently as the player lights more candles.
(5) Further Development – VR
Before I graduated from the University of Notre Dame, I worked with my professor of CDT31150 Prgrmng for Video Game Dev to adapt Candlelight Frights for virtual reality (VR). We produced a viable VR adaptation of the game in which the user can navigate using an HTC VIVE Controller trackpad instead of a keyboard’s WASD keys, and open doors and attack ghosts using the HTC VIVE Controller trigger instead of a mouse left-click and a keyboard’s spacebar, respectively. With continued access to the VR lab, I would have liked to play around with more features of VR and continue developing for extended reality.
Thank you for taking the time to learn about my first Unity 3D game, Candlelight Frights. To view this case study on my portfolio, visit https://www.sydneyheller.org/candlelight-frights.
Join us
Comments