I've always been a big fan of RTS games, one of the first games I bought for myself with my pocket money was Age of Empires II. Equally I'm a big fan of C&C Red Alert 2 and Generals Zero Hours.
There are a variety of different approaches to take with combat based real time strategy games, many of which (this one included) use a system of resources (credits, wood, ore) or to limit the rate in which the player can expand their military strength. There may also be population caps to prevent a player from camping until they have an army so large that an opponent that has been in combat throughout the game will be unlikely to be capable of resisting them.
Despite regularly playing this style of game I haven't ever had to sit down and think through these mechanics so this course provided a really useful insight into this area of game design. It also highlighted to me how crucial play testing is which this genre as the players and the developers might all have radically different approaches.
This course utilised the open source multiplayer system Mirror. I hadn't implemented any kind of multiplayer system before so this took me a while to get my head around.
Essentially the key thing to remember when implementing NetworkBehaviour classes is that they will behave differently weather they are running on the Server, Client or Host (server and client combined).
This course uses a LAN based multiplayer system for most of the projects development before switching to using Steam at the very end. This was more that a little frustrating and the Steam component of the course felt very tacked on. That said I did learn about that there is a cost from Steam to list a game on their services which is required even at a development level, it is approximately $100 at time of writing. As the games I'm making for my own learning are portfolio pieces rather than a games that I will sell individually I am tempted to buy a Steam 'page' where I can list all of the games as a collection. That said I may simply re-write this section of the game to use Unity's new Google backed multiplayer transport systems.
Another thing I found deeply frustrating about this course is that it doesn't show student's how to develop a game that is for both multiplayer and single player. As it stands this game can not be played solo at all and will require significant refactoring to separate player logic from NetworkBehaviour classes. I will of course also have to implement an AI for the enemy but that is a blog post for another day.
I wasn't a fan of the extremely stylised art assets provided by the course so I decided to spend some time modifying Synty assets for this game. I wanted to create a sci-fi game so I started with the Sci-Fi City and Sci-Fi Space packets however I couldn't find many good land vehicles which would work as the offensive weapons in the game. So I decided to use the tanks from the War Pack however these used a different colour atlas to the vehicles and buildings in the Sci-Fi City pack which most of the other assets I'm using come from.
Colour atlases are texture files which define have an array of coloured blocks. Synty typically include a series of complementary colour atlases for each pack so that the game designers can re-use a mesh multiply times with different colours which radically increases the amount of variation that you can have in a scene without having to develop lots of different assets.
Each face in a mesh has a UV definition that defines what colour should be applied to that face when the mesh is rendered. In order to convert the tanks from the wark pack, which used a camouflage texture rather than a colour atlas, I had to import the mesh's FBX file into blender and create a new UV definition for the mesh. It took me several iterations before I was happy that the tanks now matched the Sci-Fi City aesthetic such that when one of my new tanks was placed along side a sci-fi hover craft the player could reasonably believe that they are from the same world.
This allows me to select different colour atlases for all of the meshes that relate to each of the different players (or teams) in the game. Unfortunately whilst this immediately worked for all of the vehicles the buildings used a different part of the colour atlas to define their accent colours so I will have to redefine their UVs at some point in the future too.
Lastly I used this opportunity to practice my Blender rendering skills by placing several of the meshes that I have been working for into a scene and exploring different lighting styles and camera positions.