Valorant 2D
View Project

About
This game is essentially a 2D version of Valorant, focused solely on Deathmatch
and Team Deathmatch modes, with no character abilities included.
I started working on this project during the quarantine, mainly because I wanted something fun to
play with my friends on a low-spec PC. I still update it whenever I get the time, and I’m planning
to add more features in the future.
Features
- Online multiplayer with support for custom rooms and multiple regions
- Two game modes: Deathmatch and Team Deathmatch
- Variety of weapons, loadouts, and character options
- Multiple unique maps to play on
Challenges
Field Of View
I wanted to implement a Field of View (FOV) effect to make the game more challenging and fun.
While exploring ways to add FOV in Unity 2D, I came across a tutorial by Code Monkey titled
Field of View Effect in
Unity. It demonstrated how Unity's Render Features can be combined
with custom runtime meshes and shaders to create a FOV effect. This method worked
quite well, but I wasn’t satisfied with the performance and complexity of runtime mesh generation,
so I started searching for a more optimal approach.
Later, I discovered that Unity's 2D Light could be used to simulate FOV by modifying its
shader logic. This idea was inspired by another tutorial:
Recreating Darkwood's
Vision Effect in Unity.

This solution was perfect for my use case, but at the time, I didn’t have a solid understanding of shaders.While pursuing my Master’s degree, I gained a deeper understanding of shader programming. With this new knowledge, I revisited the idea and implemented the FOV system using Unity 2D Lights. To my surprise, it turned out to be much simpler and more efficient than I initially expected.
Weapon's and Loadout
Implementing the weapon system and loadout was crucial to keep the project manageable and
scalable for future updates, especially when adding more weapons.
To achieve this, I used Unity's Scriptable Objects in combination with the Prefab
System. I created a WeaponData struct that holds all the necessary properties,
such as weapon stats and prefab references.
A Scriptable Object contains an array of these weapon data structs, and the loadout system uses
this data to instantiate weapons at runtime. This setup made it much easier to manage weapons
and expand the system without needing to modify core gameplay code.


Future Work
I continue to update this game whenever I get the time, and I’d love to add more content in the
future.
Some of the features I’m planning to work on include: new maps, weapons, skins, characters, and
additional game modes. I also aim to upgrade the networking framework to improve performance and ensure
a smoother online experience.