I am writing this up as I'm about half way through the ongoing "Master Architects" class from Jason Weinman. This this be updated as I continue the class and the project.
What Is Going Well
I can tell from Jason's structure that he has be building games (and specifically Unity Games) for a long time and that his advice is coming from years of experience. This means that as I'm learning his way of thinking and getting things done, I'm confident that I can take these as best practices going forward.
Jason was also frank enough to tell me outright that to really get the highest value (as a new Unity developer), I should go and build a large number of prototypes with limited scope using other methods to achieve my same goals. This is so that I am not accepting his word as gospel without understanding what the pitfalls are from the other methods — and I really appreciate his candor about this, so I have been interspersing a separate unity prototype between each 4th lesson in his class.
So that brings me to what I have today. I have:
- a fps character controller and camera (pan and tilt via mouse, movement via wasd)
- a third person controller with click to move and attack
- a click to attack using raycasting
- a click to interact using mouse position system
- multiple weapon inventory
- scriptable object based weapon inventory
- a custom inspector for setting up weapons
- a custom inspector for configuring the player and npc inventories
- Play Mode UNIT TESTS for all of the movement, inventory, item dropping, npc states, and item picking up
- Edit mode tests for state machine class
What Isn't Going So Well
With the release of Unity 2020, the instructor appears to have gotten distracted with redoing a lot of his content with Unity 2020, which I am not ready to upgrade to. As someone who is already making my own mistakes which in practice generates bugs and problems in my projects, I do not want to also be working on an unstable version of Unity, so I do not actively work on any projects in any Unity that doesn't have the LTS label (and I try hard to avoid packages labeled as experimental as well).
So with that said, once I catch up with the class (I am three quarters of the way there), I will likely have to take the learning from that class and then return to my more lower level c# learning from Unity's own Learn resource and other paid classes online.
What Have I Learn So Far
Unit tests! I also have a very robust Interface and class system with swappable implementations of the interface so that my unit tests can mock things like controller input and drop ammo into the inventory for testing the weapon firing.
I've also learned a ton on how to structure my projects, where to import things, how to cleanly move things around to make the most sense of things visually in the project view while still having clean hierarchy view for my scenes.
I have finally gotten to use ScriptableObjects in practice. And I have experimented with a lot of the UI elements needed for an FPS.
As I was pulling in snap elements into the scene view for my various unit tests views, I also got tired of placing and rotating things smoothly by hand, so I wrote my own Editor/ extensions to do things like move an object a single "unit" based on the editors zoom level, and to rotate the objects at 45 degree angles to still give me some flexibility without for angles, but make it much quicker to setup and rotate a scene how I need it for my unit tests (and later for my game design).
I've also learned how to face light an npc, how to fade it on their death, and I've gotten another chance to build my favorite over head health, mana, etc bars into a world space UI for players and NPCs.
This is also the first time that I've build a unity project with the UI in a separate scene and had it auto-loaded when the player plays the build. I have done UI in separate scenes before, but never had it auto-load and I'm happy to have discovered that little trick.
The chapter I just completed involved setting up addressables, and though I don't understand their true value yet, I am imagining that it will have to do with dynamic loading outside of the game binary and for easier updates after I ship the game. I also hope to bake some content pushes (via Unity's new Content developer system) once that and DeltaDNA get more developer friendly pricing.
The player doesn't have any stats or a complex inventory, or mounting slots for equipment yet, but I expect that to come in future chapters of the class.