One of the most powerful aspects of the Unity game engine also happens to be one of the most controversial. I'm of course talking about the Asset Store. When used wrong, you end up with the dreaded "asset flip," which plagues the various game stores and often gives Unity a bad name.
However, when used right, the Asset Store can provide a wealth of commonly used and niche tools that shouldn't have to be rebuilt for every project. These tools allow creators (especially indies like us) to focus on the creative side of game development without spending our limited resources and time on tooling.
Below are some of our favorite tools that we've used on Arctic Awakening. As you'll notice, none of these are actual "assets," but rather tools that allow us to accelerate our development and enhance our unique gameplay and level design using our own in-house art and style.
It should be noted that you can't simply drop any of these tools into your project and be done. Just as with any built-in tool in an engine, you must put the time and effort in to learn your tools and customize/integrate them for your own needs. Some of these tools are being used in a completely different manner to which the creator envisioned, and that is fine because it serves our unique purposes and allows us to do what we do best – make great games!
This tool has really made the scope of Arctic Awakening possible by enabling mass rendering of the landscapes you'll encounter with thousands of trees, rocks, grass and foliage within view at any given time. This is something that wasn't possible on an indie scale until recently, and this tool does a great job of making it accessible (though there are still significant performance challenges that we'll detail in a later post).
Unity's new built-in input system is certainly an improvement over the original, but it would be putting it lightly to say that the API is confusing. Instead, we decided to try out Rewired, which pretty much "just works" and has a very straight-forward API to easily add support for all manner of input devices (keyboard, mouse and gamepads in our case).
Final IK offers a robust inverse kinematics solution that is vital for the type of game we're building. If you aren't familiar, inverse kinematics essentially simulates the movement of bones in a humanoid or non-humanoid character. This allows us to do things like alter walk cycles to cover non-flat terrain, pick up objects at any position and even create procedural animations for any scenario you can think of. Unity has IK built-in, but Final IK is much more robust and also supports non-humanoid rigs (which is extra-important for one of our characters in particular).
We actually only use a small subset of this tool, but it comes with a suite of shaders that provide virtually any vegetation effect you could imagine to your trees and foliage. Our use-case is to apply realistic wind, subsurface-scattering and foliage interaction to our custom mesh trees, grass, bushes, etc.
Unity's Mecanim is a very powerful animation system that can cover a lot of use-cases. However, for our purposes, it became overkill rather quickly with unwieldy state machines. The API for working with Mecanim also leaves quite a bit to be desired, so integrating animations with our custom tools/systems was problematic. Animancer takes an API-first approach that makes all of this a breeze and gives us full control to handle animations whichever way works best for our custom setup.
Fog plays a huge role in Arctic Awakening, but it is also a notoriously expensive effect. Our initial prototype of the game had a true volumetric fog effect that looked great, but it used up over half the frame time. Because of this, we switched to this solution from BOXOPHOBIC, which isn't true volumetric, but with some tinkering has provided every bit the visual polish that we were looking for while sticking within our performance budget.
Procedural animations can only get you so far, and that is where traditional keyframe animations come into play. Even without an animator on your team, UMotion Pro is so easy to get the hang of that you can easily rough out animations right within the editor and then pass them off to a more seasoned animator to polish them later. This also allows us to easily tweak animations to perfectly fit the scenario in-game.
We'll talk about color grading and color theory in another post, but it is vital to achieving the unique look and feel in Arctic Awakening. Amplify Color is great because it not only allows us to apply lookup textures (LUT) created in Photoshop to our scenes, but it also allows us to blend two together, which is vital to our custom weather and lighting system (for example, smoothly transitioning between daytime and sunset).
Everything you see rendered to the screen first passed through at least one shader. While the standard shader is good enough for many things, to really bring your game to life, you are going to need to create custom shaders. ShaderLab is great, but using Amplify Shader Editor's visual node system takes custom shader creation to a new level and allows even non-coders to get in on the action.
Unity offers a variety of post-processing effects with the built-in post-processing package, but there is so much more you can do creatively with a full-featured pack of effects like the ones offered with SC Post Effects. We especially like the sun shafts implementation as well as a variety of camera effects for different gameplay scenarios. Your creativity is really going to be the only limitation with this tool at your disposal.
Mtree is a great little tool to generate virtually any kind of tree or bush imaginable. It is especially handy when it comes to creating LOD levels for said trees as you can see the polycount right in the tool and edit your levels to exactly meet your needs. For optimal performance, we've exported these trees, modified them in 3D modeling software and applied The Vegetation Engine using a single material/shader for better batching.
Creating custom editor windows and inspectors in Unity is doable, but it is often a pain. Odin makes it a breeze to create virtually any kind of custom editor you could imagine. Because of this, it is at the core of many of our custom editor tools, some of which we'll be talking more about in later blog posts (weather system, game manager, dialogue/events editor, etc).
The name of this one can be misleading, as some might confuse it with simply a texture painter for terrains. However, the real power comes in its terrain molding functionality that allows you to easily carve paths into your terrain, even if you aren't applying any textures (which we aren't due to our snow system). Unity's terrain tools are pretty solid, but without Path Painter it would be a massive pain to create traversable paths throughout the mountainous Alaskan wilderness in Arctic Awakening.
Mesh colliders are very slow, but primitives don't always work well for many non-standard objects. We have a lot of these types of objects in our game, so a tool like Technie allows us to easily create custom colliders for these odd-shaped objects that are also performant within the physics simulation.
One of the biggest impacts on performance is how much geometric complexity exists in your scene. In order to combat that, it is important to set up LODs (level of detail) that will lower the quality of assets as they get farther away. This can be a painstaking process for an artist to do manually, but Poly Few allows us to automatically generate these LOD meshes right from within Unity.
With our background in JavaScript, we didn't exactly feel at home with Unity's events. They are also notoriously slow, and we need every ounce of performance that we can squeeze out of the engine. Easy Event Manager is a great open-source solution that enables performant events that are more like what we are used to from the web.
Do you have any favorite tools/assets for Unity or other engines? Let us know in the comments!