Unity 3D: Making My First Game
Things I Learnt
Unity (C#)
Prior to the start of the project, I binged a hands-on beginner Unity starter course (free on Unity's website due to Covid restrictions in 2020). This gave me a basic understanding of the game development process, as well as how to implement and execute that process using Unity. Once the project commenced, I heavily supplemented my learning with YouTube and Google, implementing functionalties specific to my game.
The bulk of what I have learnt manifested in the form of using Unity's engine to integrate multiple assets and pipelines into a cohesive game, as well as designing and implementing the enemy's behaviour (e.g. shooting a raycast to implement a Line of Sight module).
Timeline Management
Since this was a personal project, I had total creative freedom. However, I had to be wise with the features I wanted to implement; taking into account my lack of experience in both game development and Unity. Although I had - theorhetically - unlimited time, I set a personal goal at very start to complete this project (as well as documenting the process) by the end of summer 2022. Once the macro goal had been set, I then set other smaller, micro goals (e.g. Finish implementing Enemy Behaviour by xx/xx/xx) to help me achieve the goal of making my very first game.
Things I Didn't Learn
While there were many things that I have been exposed to through this project, there were so much more that I did not dip my hands into.
Technical (Artistic)
Since I used assets and prefabs in the development process, I didn't actually do any 3D modelling, animation and map design (the enemy 3D model had "in-built" animations).
Technical (Code)
Since I was focused on learning Unity's engine, I did not have the additional capacity to look into optimizing code efficiency. Making the game work was already a huge challenge for me. This resulted in unfavourable outcomes such as the game taking some time to initialize when the play button was clicked. This is something that I will need to be mindful of in the future as small details like this can negatively affect the user experience of the product.
Similarly, I also did not dip my hands into file size optimization, and the size of the exported application totalled 1.2GB. This was larger than I expected for such a simple game. However, I suspect that majority of the space was taken up by map textures. Other miscellaneous game functionalities that I did not have time to explore were quality of life improvements (e.g. pause menu and save files).
Operational
Since I was new to Unity's interface, there were many modules, windows and tabs that I did not manage well. This relates to adhering to the best practices of using the platform, which I am still learning to this day. Other habits I am currently actively reinforcing include where to place code relating to specific functionalities in a game (e.g. Game State Manager vs Enemy Behaviour vs Menu UI), as well as how code is written for common functionalities; to clearly organize and compartmentalize code in Unity.
Business and marketing
To be a true solo indie dev, one must also handle the commercialization of a game (including generating hype in the community through social media posts or otherwise, making a press kit, listing the game on a carefully chosen platform, track and handle metrics like sales and wishlists, react to real-time distruptions and much, much more) which I did not get the opportunity to experience as well.
Final Thoughts
There was so much more to game design than I initially thought. This is partly due to the fact that creating a game is akin to creating an entire world in your vision.
Each step in the development process (e.g. character design, environment/map/level design, animation, gameplay design/logic, menu and UI design) is its own specialty and challenge, with various methods of implementation. Each of these specialized fields are in and of itself, a profession, with many individuals spending entire careers mastering and honing their craft. Self-learning all of these simultaneously (in a new language) while trying to adhere to a timeline of an ongoing live project was not an easy task.
Furthermore, I have both back and knee issues that prevents me from "grinding" for extended periods of time. During the 2 weeks of development, there were times where I felt like quitting.
At the end of the day, the greatest lesson I have experienced is that game development is fundamentally a resource management game in and of itself; with the most valuable resoruce being time. With so many different things to do and so many different constraints, one needs to manage their own expectations from the start, as well as be flexible enough to accept reasonable changes to the product while the project is ongoing.
In the end, I am proud to have created a game all on my own, which is something I have always wanted to do (: