Mini Gungolf

Imagine playing minigolf... but with guns! Mini Gungolf blends the aesthetic of minigolfing with more puzzle related elements. Instead of using different clubs and manually adjusting their strengths, MGG comes with 6 different guns with different abilities, strengths and usage areas. Figure out when to use what weapon in which order to beat the 48 unique levels in as few shots as possible!

My Roles

PO, Programmer, Designer

Team Size

9

Engine

Unity

Timespan

10 Weeks

The Concept

Mini Gungolf started out as an idea I came up with when joking around with friends. I then decided to try implementing a prototype of that idea myself before bringing on any friends, so I set up the basic player controller and such and figured it was a fun concept and recruited a bigger team of friends to help me out with realising the full idea of the game. We made a MSCW chart to plan out exactly what we wanted so as not to overscope, and then delivered pretty much everything we aimed to add. The original concept of the game only had 2 unique guns (save for the pistol which is just a putter) but over time iterated into a deeper and more complex system with 6 guns each having their own unique purpose within the game.

My Roles

My Roles

My roles on the project were that of Product Owner, Programmer and generalist Designer. I designed and implemented the systems in the game, as well as most gameplay features. The people that I recruited to fill the team were primarily Level Designers, Sound Designers & Artists. I focused heavily on the scope of the game and making sure that everyone had the same vision for the project. The plan we laid out for all the levels and assets were made on time and everyone had assigned roles to fulfil. With the help of our MSCW, we were able to quickly select additional tasks to perform whenever people ran out of things to do. With the limit scope, we were also left with a lot of time for playtesting the feel of the maps and weapons and making sure they all felt balanced and that the maps were well decorated.

Player Controller

Player Controller

With a game like this, the player controller is one of the most important parts of the game. Especially with the nature of being a puzzle game, the most important thing is consistency. We use Unity's physics system for the ball, so if you repeat a shot two times you should get the same result both times. When the player's turn ends, their position is saved and reinstated any time they fall out of bounds, and each gun has their own set firing power and properties that are immutable throughout gameplay.

Originally the code was separate between singleplayer and multiplayer, but I ultimately merged the logic to just host a local server in singleplayer and treat it as if it was multiplayer, but with just one player. The game stores the actual state in an enum for things like saving highscores.

Weapons

Weapons

The weapons system is built to be scalable and flexible. Weapons exist in a scriptable object called WeaponData that holds things like its shot angle, shot power, visuals, how high up the visuals should be, VFX, etc. These can be slotted to equip and unequip weapons at any time.

This means that if we ever want to add a new weapon all we need to do is add another model and animations and the rest is basically set up already. If we ever want to, say, add a challenge mode where the weapons you can use is restricted, all we have to do is alter what weapons we give the player. I wanted all the variables and such to be exposed and tweakable for the designers so that I could continue implementing other features.

Worlds & Levels

Worlds & Levels

Similarly to the weapons, I wanted a scalable system for the levels that is easily modifiable and plans for the future in case we ever want to reorder levels, add more levels, change level medal requirements, etc. I use a static database to hold all the worlds and their levels that is accessible without the need of a singleton. I just load the SO once using resources.load and then it can be accessed anywhere using WorldDB.Get().

Each world and level also has their own GUID so if we reorder things, their references to things like save files remain intact. It is partially thanks to these things that we were able to create 48 levels for the game in a relatively short time.

Other Systems

Other Systems

Other than previously mentioned systems, I also implemented a leveling system with lootboxes and cosmetics. The cosmetics system includes hats with a "Preview Rig" camera that renders a texture directly to a Raw Image that is displayed in UI, therefore displaying 3D models in UI without a world space canvas.

The game also has multiplayer using Netcode for GameObjects (NGO). It allows for up to 8 player lobbies with score management, streaming multiple levels in a playlist fashion and good connectivity between clients.

Closing Thoughts

Closing Thoughts

Overall, it was a very fun project to work on. It was the first time I assembled my own team and also properly lead the direction, but I feel like our teamwork was great and we implemented the things that we wanted really well. I think that if I were to do it again, I would have liked to have more structure to each person's role, however. As it was a project we primarily worked on in our free time, some people worked more than others.

Mini Gungolf was very valuable for me to improve my skills in scalable systems, flexibility and modularity.

Tiger Martin

© Copyright 2025

Tiger Martin

© Copyright 2025

Tiger Martin

© Copyright 2025