A downloadable game

Intro

Welcome to Among Us 3D! A fan game I developed solo when first learning to do game development with Unity. This was also my first attempt at a 3D game. It was NOT easy, and I don't recommend doing something like this as your first project if you want to live a long life!

The Game

If you've played Among Us, then the game is pretty self explanatory! Run around a spaceship doing tasks while avoiding the imposter. The imposter's job is to kill all the crewmates before they finish their tasks.  If the imposter is found out or the tasks are completed before last man standing then the crewmates win, otherwise the imposter wins.

My Process

For this game I used UModeler to create Skeld, the ship map from the original game. I then used Google Poly (RIP) to find models to decorate the ship's interior. I also used a great asset called Easy Character Movement to get my character controller setup. I finally modified some models I purchased to look like space men, and incorporated Flat Kit to stylize my game's graphics.

If you're interested, I made a video on the game's development on YouTube. The video, as well as my reason for making this fan game, was heavily inspired by Dani. Aside from Brakeys, Dani was also a big inspiration to me while I was in college. I've always wanted to do game development, so watching his videos really gave me the push I needed to start making some stuff of my own.

Dedicated Server

This was the hardest part of the project. For some reason, I had the great idea of wanting to learn more than what I was already working on. So instead of using a pre-existing solution, I decided to watch Tom Weiland's video series on networking. After many MANY hours, I finally got the hang of using TCP/UDP protocols. TCP is generally used when you need to reliably send/receive data like game start, while UDP is best for redundant data like holding forward to move.

After getting the game in order, I also tried my hand at client-side prediction and server reconciliation. This was another hard concept to wrap my head around, but basically, we can't always trust that the player isn't cheating. If a player cheats and starts flying, the server should be authoritative and keep that player in sync with it. However, we don't want non-cheaters to be affected by an authoritative server. They shouldn't be held back by the server if there's something like packet loss.

To keep the player's experience as smooth as possible before rubber banding them, we can try comparing the state of the player to the state of the server. If their states still match during packet loss, we can keep the player as is. If the states don't match, we can rewind the player's state and try to smoothly get them closer to the server's state by using something like lerp. Otherwise, we may have to teleport them back where the sever says they are, which is rubber banding.

Outro

All in all, it was a great experience finishing this project! It helped me learn lots about Unity's innerworkings, the lifecycle of Monobehaviour, networking, Blender and so much more. It gave me a boost in confidence in my ability to learn new skills, as well as my ability to create games. If you've made it this far, I appreciate the support. Enjoy the game!

ONLINE SETUP:
1. If you're hosting, port forward 26950 and open up the Unity game server
2. Open up the game client and enter the host's IP address (leave blank if local)
3. Done

LOCAL SETUP:
If you just want to test the game out, you can open up the Unity game server without port forwarding and then open up 4 game clients. 4 is the minimum number of players needed to start the lobby.

CONTROLS:
WASD - Move
E - Use
F - Kill
Q - Report
M - Map

Download

Download
AmongUs3D.zip 125 MB

Leave a comment

Log in with itch.io to leave a comment.