Local Multiplayer Controller Support
The three things above are what I spent the most time on during this project. While Unity provides interfaces for most of these things, we ended up writing our own systems anyway. Unity's input system was a bit lacking, and that affected the rest of our features immensely.
- After laying out a base architecture, the first thing we started with was the input system. Last quarter Ragball used Unity's standard input system, which was not made for multiple controllers at all. Fortunately, Unity was releasing a new input system right when we needed it. It was much better, but it still left basic things either difficult or impossible to do. So we designed a way abstract controller objects that receive Unity's input events and pass them to where we actually need them. This allowed for controllers to be unique of characters, and made it possible for us to determine a definitive "Player 1".
- Once we got Unity's input system under control, I got to work on menus. Now that we had essentially written our own input interface, we couldn't use Unity's built in UI features. So we wrote up our own menu system too. This wasn't too difficult, but each of our menus behaves a little bit differently than the last. We ended up writing base button and slider classes, defining how input worked on the menus, and then using custom cursors specific to each menu to handle menu interactions.
- By this point we could finally play from the start of the game into an actual game of Ragball. While other programmers worked on other game modes and bug fixes, I took up polishing the movement and attributes of the characters. I wanted each one to feel different, and the original controls we had felt extremely slidey and hard to control. I did some simple changes like making jump height dependent on the duration of the "A" press and making it easier to start and stop walking. After that I modified the values of each character's throw strengths, angles, gravity, and other values to get them to feel different and fun in their own ways.
We had to design a lot of our own systems and interfaces to get the game as modular as we wanted, not to mention we basically rebuilt the game from scratch this quarter. It was a lot of work, but we are finally at a point where we can add game modes pretty easily because of our new design. We changed how inputs are handled in a way that makes it easy to change and add controls. Our team is very happy with the overall product we finished with, in terms of art improvements and code. Everything is much cleaner and modifiable. We will absolutely use some of what we learned here for Unity projects in the future. It's been a great quarter working with everyone, and I can't wait to see what we make next!