
Roles + Responsibilities
Role:
-
Programmer
-
VFX Artist
-
Designer
​
Responsibilities:
-
Design and implement the shooting and movement mechanics
-
Iterates the mechanic based on player test feedback
-
VFX
​
High Concept
Emit Time is a single-player, endless 2.5D top-down perspective arena shooter where you play as a mad scientist armed with his Pulse Rifle, sword, and time-reverse ability as he desperately fights to survive as long as possible against hordes of time-warped mutant horrors.
Background + Project Goal
This game is the first game I ever developed when I was in Vancouver Film School as a student. The goal is to create a 5-minute engaging gameplay experience in 2 months ( May 2025 - Jun 2025) as a team of 5 using Unity Engine.
Table Of Content
Programming

Top Down Aiming
While Emit Time is a top-down shooter, the camera is angled at 40 degrees rather than looking down at the surface vertically. This introduced a challenge in mapping the screen-space crosshair to an accurate world-space firing direction.
​
I addressed this by raycasting from the camera onto an adjustable aiming plane to determine the intersection point. This point serves as the weapon’s target position, allowing bullets to travel toward the crosshair’s world-space equivalent.

Aiming Raycast
Sprite Animation Implementation
The team aimed to create a sense of uniqueness by adopting a 2.5D approach, where the environment is fully 3D while the player character is in 2D.
This design choice introduced a challenge for the player character. In a 3D environment, bullets are typically fired along the weapon’s aiming direction. However, in our case, the character and the gun itself exist purely as part of a 2D sprite, which complicates how firing direction is represented and aligned within a 3D world.
​
To create the illusion of a 2D character behaving within a 3D space, I separated the gun and arms from the character’s body. The gun + arm component rotates freely to follow the mouse cursor and change the sprite according to the angle (Top/ Down/ Side direction). Meanwhile, the body remains independent and switches between different sprite animations based on the cursor’s position relative to the character, using an animation blend tree to ensure smooth and natural transitions.
Animator Controller

I used Vector3.SignedAngle to get both positive and negative angle values between the aiming direction and the character’s forward vector. After remapping the angle to a 0–360 degree range, I categorized it into directional sectors (left, right, up, and down). Then change the animator parameters based on the direction sector, allowing the character’s animations to update dynamically based on the current aiming direction.
Gun Spirte Rotate




Explosive Barrel
The explosive barrel mechanic was added after multiple rounds of playtesting. During combat, players were often overwhelmed by large groups of enemies, which caused lots of frustration. This indicates a need for a mechanic that could enable large-scale enemy elimination while still requiring a degree of skill to trigger.
​
Explosive barrels, scattered throughout the map, became our solution. When detonated, they can instantly eliminate nearby enemies, providing powerful crowd control without significantly increasing the project’s scope or development cost, which was an important consideration given our limited development time (1 Month).​

Explosion Code
On top of the standard explosion effect, we wanted to enhance immersion by having the barrel physically break apart and scatter debris when it explodes.
To achieve this, we separated the barrel from a single mesh into multiple fragments and applied force to each piece using AddExplosionForce().

Fragment Force Code
Barrel Fragment Collider And Hierarchy



Penentration Code
Weapon Design
The weapon includes two firing modes: a low-damage automatic fire and a high-damage charged shot with penetration, both capable of applying short-range knockback for crowd control.
​
During prototyping, our team explored two different control schemes for switching between these firing modes. To support rapid iteration, I built a modular input system that allowed us to switch between two different firing mode control designs in real time, which greatly accelerated playtest iteration in our case.
Control Design Switcher


The Penetration was affected by the charged-up Energy; The charging curve can by easily tweaked
Visual Feedback
During the development of EmitTime, I worked as a VFX artist for the first time, which was an important step in my creative and technical growth. I learned how to utilize Unity Shader and Unity Visual Effect Graph to create effects while controlling the parameters via code. Here are some of the highlighted works.

Player Trails
The trail is exclusively enabled when the player enters the past state with a sword. As players cut through groups of enemies, the trailing effect reinforces the player’s perception of high-speed motion.
