Amongst Us
Project Type: Personal | Project Status: Completed | Project Duration: 4 months | Platforms: Windows/macOS | Languages used: C#
Amongst Us is a 3D remake of the popular online multiplayer game Among Us, which I took worked on as my first game. This project took 3 attempts and was completed in 5 sprints with an additional 6th sprint to polish the game and apply code optimization.
Sprint #1 (10/14/22)
Contributions made:
Created and imported player models from Blender (alive and dead)
Created idle and walking animation for the player model
Created toon shader for the player model
Implemented player movement & camera controller for first-person POV
Created Skeld environment using ProBuilder and ProGrids and also applied various materials
The main focus of this sprint was to set the foundation of the player and the environment in which the game will take place. I created the player model in Blender with rigged animations by modifying an existing model I found on Sketchfab. The link to the Sketchfab model can be found here.
Sprint #2 (10/26/22)
Contributions made:
Configured lighting partially in the Skeld environment using baked lighting
Changed skybox for a better background look
Created UI with key elements including minimap, task progress bar, & task list
Created various task GameObjects placed around the map
Implemented functionality to tasks and linked with task display and progress bar
Created killing and walking effect using the particle system
For this sprint, I wanted to concentrate on core mechanics such as completing tasks and creating the HUD.
Sprint #3 (11/9/22)
Contributions made:
Imported 2 unity packages for purpose of adding props to the Skeld environment
Added 4 camera GameObjects to act as security cameras
Set up incident GameObjects with functionality by the impostor
Set up doors around the Skeld environment with open/close functionality by the impostor
Implemented door/incident buttons on map layout for impostor
Added functionalities for calling emergency meetings & reporting
Added winning/losing functionality from completing tasks & the incident timer
Improved the minimap functionality for better coordination
My main focus here was to improve the overall appearance of the Skeld environment and adding core features taken from the original game such as opening/closing doors, security cameras, calling meetings, & triggering incidents.
Sprint #4 (12/15/22)
Contributions made:
Created main menu scene
Imported Photon PUN2 package to the project for networking & adding multiplayer functionality
Implemented functionalities for creating & joining rooms
Set the ability for the player to spawn randomly both in the room & in the game
Implemented color customization feature for players in the room and update player properties
Implemented room settings modification by master client only and update room properties
Limited character length for player name & room name
Synced the number of players in a room across the network
Added the ability to start a game (by master client)
Linked minimap with corresponding networked player
This sprint is where I started working on networking and multiplayer functionality. Up until this point, I only had experience working with PUN2 & Mirror and so I felt more comfortable using PUN2 for this game. I also used Photon's Fusion Impostor sample as a reference while working on this sprint. The link to the sample can be found here.
Sprint #5 (1/19/23)
Contributions made:
Reworked all in-game mechanics to be synced over the network
Added message coroutine to be triggered at the start of a match letting players know their role
Walking animation and particle effects are now viewable to other players
Implemented a feature for impostors to be able to see other impostors with their names in red text (crewmates' names are displayed in white text)
Synced the total number of tasks for all players in the task progress bar
Created killing mechanic for impostors and added blood splatter effect when the killing occurs
Implemented functionality of spawning dead body prefab and ghost player after killing occurs
Created a meeting panel with the functionality of voting to kill a player
Created UI for displaying player info in meetings (alive & dead) and all players that voted at the end of meetings
Implemented functionality of closing any active tasks & incidents whenever a meeting is called by a player
Created a coroutine of a player getting voted out to be triggered after a meeting
Implemented functionality of destroying all dead bodies after meetings and respawning players (alive & dead)
Implemented functionality in the Game Manager to keep track of all players that are alive & dead
Improved color picker to work with RGB values that are between 0 and 1
Colors are now synced and randomized when players join a room
Created UI to display players and their roles at the end of a match along with a win/lose text depending on player role
For the 5th sprint, I was able to complete the work on all the core mechanics of the game while also syncing them over the network for real-time multiplayer gameplay.
Sprint #6 (2/12/23)
Contributions made:
Created Mira HQ and Polus scenes and then added them to the list of playable maps
Imported several assets and 3D models from Sketchfab, Poly Pizza, & Unity Asset Store
Added all game mechanics and core functionalities to both scenes
Compiled final builds for Windows and macOS platforms
Optimized all code in the Scripts folder
I designed a 6th sprint for the purpose of polishing the game, fixing several bugs, and optimizing the code for better performance. I also took some time to recreate 2 other playable maps as well.
Since this project was personal, this game will not be released to the public for the intention of not wanting to be sued. I worked on this project purely for my own benefit in hopes of gaining valuable experience in the field of game development. I also want to give credit to some creators since I used their 3D models for the project. The list of 3D models can be found here:
Drill (jeremy): https://poly.pizza/m/93nEcwogYE0
Radio tower (Poly by Google): https://poly.pizza/m/d1zYJG7rJGY
Generator (KolosStudios): https://poly.pizza/m/K58RQ63qR5
Tree (ERF112): https://sketchfab.com/3d-models/low-poly-tree-043563d59e574894bbc3de8a037a0b9f
Bathroom stall (Yaiyeondurising): https://sketchfab.com/3d-models/cubicle-without-toilet-114a3170351f413e8af4b0e596237dac
Rock (Bull studios): https://sketchfab.com/3d-models/stylized-lowpoly-rock-6e476441b5614231bf4e8de194c418d9
Telescope (CreativeTrio): https://poly.pizza/m/RjyTCQvA8b
Spaceship (Tony): https://sketchfab.com/3d-models/pixel-low-poly-spaceship-eaad1ae4bf6a43fd9f3a80400dacbbfd
Bench (Miss.Demonica): https://sketchfab.com/3d-models/low-poly-bench-9c61266047ae43bfbd7d6b588afdb508
Bookshelf (Billy Jackman): https://sketchfab.com/3d-models/bookshelf-b8f46cf7daca419a87ac8d131bad056f
Locker (bradley.merron): https://sketchfab.com/3d-models/low-poly-lockers-508e8920e7614d6fb2e544586f3f9eac
Antenna (Matheus.Filipe): https://sketchfab.com/3d-models/antena-dfc0e6e423b34c3f923124a1bf6aa1a8
Spaceship (Green fish): https://sketchfab.com/3d-models/low-poly-space-ship-7a7336f2a58c43b4b5ad57dab0a9778f
Fence (Gamedirection): https://sketchfab.com/3d-models/chainlink-fence-low-poly-50901b0cc91b4e04a18ecd13bc379a90
Button (ZeroCardinal): https://sketchfab.com/3d-models/low-poly-emergency-button-d4e61a2f1afb447aa381b912c9a68a90
Picnic table (mankindforward): https://sketchfab.com/3d-models/low-poly-picnic-table-02e3f81d79494bdcb0cc2edffd6dd1b9
Barrel (Quaternius)): https://poly.pizza/m/ONdghDBByN