There is no better way to raise your productivity than using good tools during your development. This way you can concentrate on developing the things that make your game special instead of reinventing the wheel for a lot of already solved development problems.
I’d like to give you a list of the most important tools, middleware and assets I have used in my past projects. See if one catches your eyes and check if it saves you as much time as it saved me 🙂
As a programmer, the most time-saving tools are programming focused. There should be as little things as possible that you do repetitive in your daily work (this is valid for every work I would say). Best thing for real repetitive tasks is to automate them. If that isn’t possible, e.g. because the tasks are similar but not identical, you should try to find a tool which does the task as quickly as possible.
My IDE of choice since I started programming in C++ about 16 years ago. I tried several others (Eclipse, Code::Blocks, MonoDevelop,…) but always came back to Visual Studio. It can be a bit overwhelming when starting with it, but all of its features have to go somewhere. I haven’t missed a major thing over the years. Sometimes it was a bit difficult to find the functionality I needed, but with a quick Internet search I was fine. In the end I think there are still more features I haven’t used than the ones I needed.
The price is tough for the professional edition, but fortunately there are several offers by Microsoft to get Visual Studio for free. If you are student ask at your university for an academic license, if you are a startup (< 3 years in business) you want to join the Microsoft BizSpark program to get free Microsoft software (not only Visual Studio, but much more).
Price: Free (Community Edition), 1.199$ (Professional)
The one plugin you need for Visual Studio if you are developing with C#. In my first company we developed in C++ and used Visual Assist which already gave me some nice additional features to be more productive. ReSharper satisfies the same needs and even more. Here are some of its main features:
- Code completion
- Code cleanup
- Code inspection
- Integrated Unit Testing
It integrates seamlessly into Visual Studio, most of the time you can’t say what’s a Visual Studio feature and what’s a ReSharper one. But you will notice it as soon as you are working with Visual Studio without ReSharper. I was skeptic if it is worth its money as Visual Studio already comes with a lot of possibilities. But as soon as you worked with it for a few weeks you don’t want to work without it anymore.
The gain in productivity is really sensible. You can concentrate on what you want to program instead of how to program thanks to code completion and the really helpful suggestions from ReSharper. If anything isn’t as clean as you like, refactoring is done in a blink of an eye. E.g. moving a class into a separate file is done with a three button presses (Alt+Enter, Enter).
As with Visual Studio there are some ways to get this helpful tool cheaper or for free. Just check out the discounts section at the product page.
Price: 249€ (commercial), 149€ (personal)
In the Unity ecosystem there are a whole bunch of useful and not so useful tools thanks to the Unity Asset Store. The real challenge here is not so much to find any tools but to find the right ones for your development.
Chances are you already heard about the engine 😉 Nowadays it’s fortunately far more common to use an existing engine to develop your games. When I got into game development there were many projects which developed and used their own engines. Which is fine if you are a big studio with great programmers and a very unique kind of game that can’t be developed with an existing engine technically. But most of the time you really want to use an existing engine. It’s not impossible to write your own engine, but as your time is limited you should focus on getting the things into your game that make it unique.
Here are some things I’m happy I don’t have to do myself:
- Rendering, Shaders
- Multiplatform issues
It always depends on the project which features of the engine you can and want to use out-of-the-box and which you want to rework yourself. Just make sure to always check what the engine can do for you before doing it yourself.
Price: Free (Personal), 75$/month (Pro)
Using Visual Studio to do the coding for Unity projects wasn’t a problem. Unity already created project files one could open in Visual Studio and updated them when a script was added/removed.
There was only one thing making it really difficult when working on a professional game: Debugging. From my C++ projects I was used to use the Step-by-step debugger that was integrated in Visual Studio and which worked really great (you could even put the execution pointer several lines of code back!). So it was really a big step back when I was forced to do bad old console debugging in my first Unity project back in 2010.
Fortunately a little tool called UnityVS was developed, probably with debugging in mind from the start. You can set breakpoints and go through your code step by step and inspect (most of) the variables. This makes bugfixing much, much easier again.
The UnityVS plugin is now owned by Microsoft themselves and available for free. I hope to see them continue the integration between Unity and Visual Studio even more as there are still some issues with the debugging. But it’s a great start already!
NGUI => Unity UI
There was a time before Unity UI when using the built-in solution for the user interface was no option at all. So for my first professional Unity project I wrote our UI architecture from scratch. That wasn’t an impossible task (I already had some experience with UI frameworks), but it took a lot of time anyway before it was usable and stable. If I had known about NGUI a bit earlier, I would have probably used it instead of creating an own UI system. It is generic enough to be used in nearly all games and is technically mature.
I wouldn’t use it in future projects anymore though. Unity UI is very much the same, but integrated into the engine, so it did some things very clean where NGUI needs workarounds. Unity UI was very much influenced by NGUI (actually the NGUI developer also developed Unity UI together with the Unity team), so all the good learnings from NGUI went into it. Plus Unity UI is free as part of the engine.
NData => Data Bind for Unity
Another asset that I’m glad I found a few years ago. For the logic of your game you can use a nice framework (e.g. a component-based one, like our Slash Framework), for your UI you use a UI system of your choice. But how to get those two together in a clean way? In my imagination it would be best to have a man-in-the-middle, so the UI just has access to the data it needs to display and on the other side the logic doesn’t know anything about the UI system (or even more: Doesn’t know that there is a UI anyway).
I tried out the MVVM architecture with WPF for some tools where a clean separation was achieved by having data contexts in the logic with properties on which the presentation classes like the UI controls could register to be informed about data changes.
This is what NData added for NGUI as well. The UI just gets a context with data that it might display to the user. This data context is created in the logic but has no reference to NGUI whatsoever. The controls are bound to specific data properties than by adding a binding script to them which e.g. sets the text of a label.
Unfortunately the asset had some flaws and its support and further development was dropped over a year ago. The concept behind it was great though, so I decided to create a new, more consistent and clean separation layer between game logic and presentation. This asset which have come to great use in our last and current projects is called Data Bind for Unity and available for everybody on the asset store.
Line drawing shouldn’t be a problem in an engine. Unfortunately it is with Unity. That’s why I bought Vectrosity some time ago. It is a whole line drawing factory with many possibilities to make the lines on your screen the way you want them while still keeping an easy to use interface.
I hope that someday these possibilities will be integrated into the engine but till then I’ll have a nice tool to workaround those shortcomings.
Those are just very few of the tools I have used in my last and current projects. But they had a big impact on my productivity and are all worth their money. If you have the possibility, try them first before you buy them, as a tool which works for one developer/project might not be the right one for another.
I’m always searching for new, cool things to try! So if you have a great tool that you use for your projects, please leave a comment! 🙂