I strongly believe in writing every day—until you publish a book. Now I think it’s pretty important to do something else for a little while. Like a lot of developers (I suspect), I enjoy starting little prototypes from scratch pretty frequently. This seemed like a great way to decompress from months of writing and editing, and so far it’s been very effective! I decided to toy with a 2d retro-inspired scene that could theoretically lead to another run at the cartridge-collecting game idea I’ve been so obsessed with for years. It led to a very pleasant weekend during which I did not obsessively jump from the Amazon book charts to the Kindle dashboard to the search listings and then back to the Amazon charts again.
I’ve taken one serious run at the cart collector game in the past, but I somehow convinced myself this would be a good FNA project. For those unfamiliar, FNA is a community-maintained version of the defunct XNA, Microsoft’s Xbox development framework from years gone by. FNA is still plenty capable for very determined developers with C# skills who love pure coding projects in Visual Studio. Things get tricky when it comes to editing tools—although you can create them yourself with very few limitations. Cross-platform releases also require some fairly experimental sorcery. Michael Hicks actually described this in his book chapter about the development of The Path of Motus.
So once again, I’m a coder at heart who accepts the value of a major engine like Unreal or Unity. My only real issue with Unity is that I’m a one-man army—not just in the number of roles I do, but also in the number of devices I need to work from. I have an amazing studio office I almost never get to use. More often, I’m knocking off tasks from the MacBook at the kitchen table or the Surface Pro hanging out in my wife’s office. My book interviews were transcribed in a web browser and edited almost entirely on phones and tablets. When I’m developing a game, the repository usually looks like four or five people are on the project, and this causes issues with Unity. Dropbox tries to sync up files while the editor tries to work with them, each side causes lock-ups that the other doesn’t know how to deal with, and it becomes unworkable in a hurry.
Unfortunately, source control alone isn’t the answer. Early in game development you learn about the “large file problem.” Games use images, audio, and other very big files. Git makes a copy of everything with each new version. See the problem? The repository gets gigantic almost immediately. Git LFS (or, “Large File Storage”) goes a long way to rectify this by starting with a copy of all of the large file formats you specify, then it simply uses links to the original copies when they haven’t been changed. This requires some pretty specific knowledge to set up. Finally, you still need access to the assets, and the originals shouldn’t live in your project’s Assets folder. This is where something like Dropbox usually stays involved.
When I last wrote about my workflow, I was starting projects in Microsoft’s Azure developer dashboard (of all things) even though I didn’t anticipate using any cloud services. This is something they had no problem with. The dashboard supported multiple code repos, I could start a Wiki for the project, and I could start one of my beloved task boards to track work items and move them from “to-do” to “doing” to “done.” Without Microsoft services, it was about as easy to do the same thing using GitHub and Trello. Trello has a nice GitHub integration feature where I can link code commits to task items.
How times have changed! On a whim, I did a few Google searches to see how people were working on projects from multiple machines—it has to be this kind of search specifically because looking up collaboration brings up different issues about working simultaneously which, sadly, I cannot do. This led me to my new favorite page on the internet: https://unity.github.com/. I don’t know whether this is more GitHub’s doing or Unity’s, but Unity now has integrated support for GitHub with LFS. The same way you’d open the Animator or any other Window in Unity, you can open and place a tab to manage code commits from within Unity. You can initialize the repo from within the editor. You can pull, push, and anything else I’d care to do while working with the repository. The ignores and the large files are all managed automatically. To move to a new device, I only have to push my work to the remote repo, clone it on the new machine, and open it in the same version of Unity with GitHub integration set up. It doesn’t seem to work perfectly on MacOS, but if I use the tool to open a command line, everything works as expected. It’s a phenomenal change.
Not only has GitHub adopted a free unlimited private repos policy, they’ve added project task boards! I’m so obsessed with this that I’d love to see the project boards integrated into Unity as well, but I’ll take it! It’s a little bit simple at the moment. I can’t seem to access a board from the mobile app. Surprisingly, I can’t seem to link a commit to a task like I can in Trello. With a little bit more magic built in, I could imagine moving on from Trello completely.
So that’s the new cloud magic:
- Engine: Unity
- Source Control: Unity + GitHub
- Task management: GitHub
- Asset Syncinc: Dropbox
I coded my first game in Lua entirely out of Dropbox, but this is the simplest Unity configuration I’ve ever figured out.
What are your solutions? Tell me what I’m missing with my tools, or tell me your equivalents. I could definitely expand this post to contain other popular solutions.