CS199 Final Reflection

I originally didn’t intend to work on an independent game this quarter since I was already enrolled in CS247G and expected that class alone would take up most of my bandwidth. But, after a late-night study session with my friend Ngoc, I somehow found myself drafted onto her game team. At first, I was a little worried; compared to my peers, I had very minimal experience with Unity, and most of what I knew came from small projects and brief experimentation. I knew enough to get around, but I definitely did not feel confident contributing to a larger game project right away. Because of that, I spent a lot of time at the beginning of the quarter simply learning how to use Unity more effectively and becoming comfortable navigating a larger codebase. Fortunately, I was pleasantly surprised by how supportive and helpful my teammates were throughout the entire process. Instead of feeling like I was constantly playing catch-up, I felt encouraged to and contribute wherever I could.

My initial responsibilities centered around an initial implementation of the game’s inventory and item systems. I thought the work felt surprisingly similar to assignments I’ve had in other classes since the overall infrastructure and design had already been created by Lucas. However, translating those ideas into a functioning game system was still a challenge. Unlike many class assignments where the scope and requirements are tightly defined, game systems have a lot of interconnected pieces that need to work together smoothly. I had to think about how items would be represented, how inventory data would be stored and managed, and how the different systems would communicate with one another.

Through this work, I was introduced to several Unity-specific concepts that were completely new to me. I learned about Scriptable Objects, singletons, and game managers. At first, these concepts felt somewhat foreign because they differed from the software architecture patterns I was used to seeing in traditional programming courses. As I worked through implementation details and saw how these tools were used in practice, they began to make much more sense. In fact, I found them useful enough that I later applied many of the same ideas when implementing an inventory system in my own CS247G P2 game, Recursed. Being able to immediately transfer knowledge from one project to another made the learning process feel especially rewarding.

Going into the project, I was very anti-AI and actively avoided using it while working. I preferred to understand every piece of code myself and generally felt that relying on AI tools would diminish the learning process. For most of the quarter, I stuck to that philosophy. However, as deadlines became tighter and the workload increased, I eventually had to soften my stance. While I still preferred solving problems independently whenever possible, there were moments when AI became a useful tool for quickly understanding unfamiliar APIs, brainstorming implementation approaches, or accelerating smaller tasks. The experience did not completely change my opinions, but it did make me more pragmatic about where these tools can be useful and where they can become a crutch.

While implementing the inventory system, I also worked on creating a simple UI hotbar. Compared to the backend systems, this was my first substantial exposure to Unity’s UI workflow. I learned how to work with UI grids, layout groups, and inventory slot organization. Although the final interface was relatively simple, creating it gave me a much better understanding of how Unity handles user interface elements. To speed up development, I pulled some simple assets from online and used them for the grid sprites. This was also my first experience integrating external art assets into a Unity project and making them fit within an existing visual style.

As the quarter progressed, my role gradually shifted away from programming and toward creating 3D assets for the game. This ended up becoming one of the most enjoyable parts of the project for me. We wanted the game’s assets to use toon shading with black outlines so that they would visually match the 2D sprites that Ngoc had drawn. While I had some prior experience with Blender, I had never attempted to create assets with this particular art style, nor did I have any experience with importing and integrating custom models into Unity.

The toon shading process ended up being relatively straightforward after some experimentation. I used UV unwrapping techniques alongside a color palette I found online to create the simplified shading effect we were looking for. The assets themselves were created through a combination of hand modeling and modifying existing models that I found online. Striking a balance between creating original content and adapting existing resources was an interesting challenge. Sometimes it was faster to build something from scratch, while other times it made more sense to start with an existing model and reshape it to fit the project’s aesthetic.

Final set of assets I made for the quarter.

Creating the black outline effect turned out to be significantly more challenging than the toon shading itself. I spent a considerable amount of time researching different methods and testing various approaches. I experimented with Unity’s toon shader solutions, looked into using Grease Pencil in Blender, and tried several modifier-based workflows. Each approach had its advantages and drawbacks, especially when considering how easily assets could be exported and re-imported during development.

After a lot of experimentation, I ultimately settled on a fairly simple modifier setup in Blender. The process involved creating a scaled copy of the model, coloring it black, and flipping its faces so that it rendered as an outline around the original mesh. While the technique was relatively simple, it provided exactly what we needed. More importantly, it allowed for quick iteration and behaved reliably when imported into Unity. Since game development often involves repeatedly making changes and testing them in-engine, having a workflow that was easy to maintain ended up being more valuable than pursuing a more technically sophisticated solution.

Some of the 3D models I made imported into our kitchen scene.

Although I had prior experience using Blender before taking this class, most of that experience was isolated from game development pipelines. Importing assets into Unity, setting up materials, troubleshooting scale and orientation issues, and ensuring that assets looked correct in-engine were all skills that I had very little experience with beforehand. Working on this project gave me much more confidence in that process and helped bridge the gap between creating assets and actually using them in a game.

Beyond the technical skills I developed, one of the most valuable aspects of the project was the opportunity to work closely with a team. Collaborating on a larger project gave me a much better understanding of how different disciplines contribute to game development and how important communication becomes as a project grows. Whether we were discussing implementation details, coordinating asset creation, or helping each other troubleshoot problems, there was a constant emphasis on collaboration.

I also learned a lot about relying on other people. In the past, I often approached group projects with the mindset that I should expect very little from my teammates and simply do as much as possible myself. While that approach can sometimes guarantee progress, it also limits what a team can accomplish together. This project was a refreshing change of pace. My teammates were talented, dependable, and willing to help whenever problems came up. Instead of trying to handle everything alone, I learned to trust other people, communicate more effectively, and contribute where my strengths were most useful. That shift in mindset was probably just as valuable as any technical skill I learned during the quarter.

The team, mid late-night work session.

Looking toward the future, I have already expressed interest to Ngoc about continuing to work on the game over the summer. We have discussed the possibility of leaning further into 3D assets and expanding the game’s visual style, which means I will likely take on a more active role in 3D modeling and asset creation. Given how much I enjoyed that aspect of development this quarter, I am excited to continue building those skills and exploring more advanced workflows. More broadly, this project gave me confidence in areas of game development that previously felt intimidating, whether that was Unity programming, asset integration, or collaborating within a larger team. What began as an unexpected invitation during a late-night study session ultimately became one of the most rewarding experiences of the quarter, and I am looking forward to seeing our finished game.

About the author

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.