top of page

Spin Spin Laser

Concept

Spin Spin Laser is a action platformer that merges aiming of a weapon with the movement of the character. The player must survive as long as they can while protecting a character in the middle of the circular level.

This game was started during a 3 week C# Unity course. My goal was to make the platforming an integral part of an aiming mechanic.

2023

Solo project

4 weeks

AvailableOnItch.png

Key Feature - Top Firing Laser

1. Discovered the core idea through experimentation and iteration.
 

2. Implemented the firing-from-above mechanic with laser alignment to the player.
 

3. Designed the game around this central mechanic.

LoopSpin

Core Loop

Avoid dangers

Move and jump to avoid damaging elements.

Goal:

Survive and protect!

Destroy enemies
Align yourself and the laser to destroy enemies, alternatively heal yourself or the VIP.

Asses enemy positions
Plan your route based on enemy positions.

Pillars

1. Coordination

The sky laser fires from above and can only move forward or backward, requiring the player to align their character strategically to hit enemies.

2. Quick decision making

Enemies spawn unpredictably, forcing the player to choose their movements wisely. Health bullets can heal the player or the VIP that must be protected.

3. Pressure player

The player must always be moving and planning their next position, with the yellow cube adding relentless pressure.

ExploringSpin

Finding the concept

Exploring Ideas

My initial idea was a turret that shoots where the player's crosshair points in 3D space, but I struggled to justify its use over a regular gun.

I experimented with enemies that moved toward a protected object and allowed turret height adjustments with the scroll wheel. Despite these efforts, I couldn’t create a compelling goal or level design. I also added a yellow cube that chases and damages the player, splitting their attention and adding pressure.

SPin_UpDownTurretArena.gif
TurretCameraSpin

Turret Control and Camera

The final idea started to solidify when I attached the turret to a horizontal pillar that rotates with the player. This allowed the player's position to control the turret's circular alignment, while the scroll wheel enabled movement along the pillar. The turret now only fired straight down forcing the player to move according to where they want to aim.

Spin_Rotate_InArena-ezgif.com-cut.gif

During testing, I found the gameplay became more dynamic when the player was positioned on the same level as the enemies and the object to protect. The challenge then was handling the turret's movement along the pillar, as looking away from the center caused the movement to invert relative to player input. The solution was to lock the camera towards the center, ensuring the turret's movement direction always aligned with the screen.

SPin_CenteredCamera.gif
RefiningCoreSpin

Refining the Core

With the core gameplay in place, I focused on refinements. I added damaging floor marks in strategic spots to promote the platforming and increase coordination between controlling the player and the turret. Health pickups were placed at the map's edges, where turret control is slower. The camera was adjusted for better visibility from above, and a new laser indicator was added to show the turret's position.

SPin_Refinementsv1.gif

This version was nearly final.The next steps involved balancing, adding visual flair and sound, and incorporating elements like menus and a timer to track progress, rounding out the experience into a complete standalone game.

CameraSystem

Implementation

Here are some of the core systems in the game and how I achieved them:

Camera System

I wanted a camera that had a point of view that made controlling the laser intuitive. This meant coming up with a system that moves the camera position according to player movement while always facing the middle of the level.

ApplicationFrameHost_eCtIDuqRrG.gif

This script ensures that the camera follows the player while maintaining a fixed distance from a central point. It calculates the direction to the player, adjusts the camera's position accordingly, and always keeps the camera focused on the central point, ensuring the player remains in view during movement.

AimLaserSpin

Aiming the Laser

The player uses a laser that shoots from above to destroy the enemies. This forces the player to align with the location they want to shoot at. The camera is always aiming towards the center of map and mouse movement is used to control the lasers position on the forward axis.

This mechanic requires the position of the skylaser to be adjusted according to an object that spins around the center depending on the players position. The skylaser's position is also based on mouse input and is clamped for the laser to stay within the level.

IntensitySpin

Intensity and Event System

It was important for me to create a way to see how activating enemy spawners and changing their spawn rate would affect the gameplay. I made an excel sheet where I could easily tweak and visualize the spawn of enemies and the laser ring. This eliminated the need to replay the game repeatedly to check for unintended clusters of enemy spawns.

To control the ramp up in intensity, I created a highly customizable event system tied to time. This system enabled me to schedule events at specific time points to control enemy spawns, increase enemy speed, and trigger the expanding laser ring. This script was attached to an empty object in the scene, and game objects could be affected by calling them and their functions in the time events.

ReflectionsSpin

Reflections

This was the first game I ever created, and it was an incredibly rewarding experience. It served as a great introduction to tackling both design and technical challenges.

 

By establishing clear constraints from the start, such as "movement should affect aiming," I was pushed to think beyond my initial instincts and explore ideas that I hadn’t seen in games before. It became clear that game design is essentially problem solving, but in order to solve problems effectively, the goal must be well defined so that progress can be measured against it.

 

I learned the importance of experimentation and testing. Many of the final elements of the game exist because I tested ideas that didn’t work initially, but those failures guided me toward the right solutions.

 

Through playtesting with classmates, I realized how easily a game can become unintentionally difficult. As the creator, it’s easy to forget what it’s like to experience the game for the first time, especially with a novel mechanic like this one.

bottom of page