My Unity Toolbox

This is a series of articles I'm writing as an extended postmortem for Stacks On Stacks (on Stacks), a game I've been working on for five years. You can wishlist the game on Steam here

This article is a lot more pragmatic and less theoretical than my previous ones. I'm going to run through all the Unity plug-ins we used on Stacks, assess how well they worked, and try to offer some helpful advice on choosing your own tools. In addition, I'll share some tools I'm excited to try out on our next project!

InControl

https://assetstore.unity.com/packages/tools/input-management/incontrol-14695
What: "A unified, cross-platform input manager for Unity that standardizes mappings for common controllers."
Why: An input plugin is absolutely essential for working in Unity if you plan on supporting gamepads. The out-of-the-box Unity input is extremely limiting and can't account for many different controller types. An input plugin allows you to easily map many inputs to one "action" (ie "Jump" means Spacebar, but also the "X" button on PS4). Technically, you can do this using the native Unity input window, but Unity's window is difficult to use and has less functionally. A plugin also includes tools for supporting in-game remapping and multiplayer input profiles.
My Thoughts: When I first began developing Stacks, InControl and Rewired were the two popular input solutions for Unity. I chose InControl. However, lately, it seems like more and more devs are choosing Rewired. Personally, I've been very happy with InControl and have found full support on every console I've brought Stacks to. I've rarely found myself needing something that InControl can't do. That said, a careful comparison of Rewired and InControl before purchasing either would be wise. Another thing to keep in mind is that Unity has been working on revamping their input system. If they improve Unity's native input a separate plugin may become unnecessary in the near future.

A graph of different nodes connected by lines. Each node shows a graphical effect evolving to a complete shader.
ShaderForge's node-based visual scripting for creating shaders.

ShaderForge

No longer available.
What: A visual node-based shader programming tool.
Why: Writing shaders allows you to get all sorts of awesome, unique visual effects, but unfortunately, writing in GLSL is very difficult and counter-intuitive to most programming languages folks are used to. While I have scripted some of my shader code, I find it much more efficient and easier to do with a graph-based editor that lets me see the visual effect of each bit of logic I add.
My Thoughts: While ShaderForge used to be the best solution, the creator of ShaderForge has retired it and ShaderForge is no longer listed on the Unity asset store. There are other solutions available, but, like InControl, Unity has been working on a visual shader graph tool of their own. It makes sense for them to add this since Unreal's material editor provides the same functionality out of the box. I've heard there are a lot of issues with Unity's beta node-based shader editor right now, but I would recommend using it anyway if you are just starting a project as I feel being ahead of the curve here would be very beneficial.

Text Mesh Pro

https://docs.unity3d.com/Packages/com.unity.textmeshpro@2.0/manual/index.html
What: "TextMesh Pro uses Advanced Text Rendering techniques along with a set of custom shaders; delivering substantial visual quality improvements while giving users incredible flexibility when it comes to text styling and texturing."
Why: Unity's default Text solution will look awful at many resolutions. Text Mesh Pro uses signed distance fields to help ensure your text is crisp regardless of the scale of the text or the resolution the player is looking at it in. Text Mesh Pro also comes with a lot of useful styling features, such as better solutions for outlined text, drop shadows, gradient fills, bevelling, etc.
My Thoughts: Text Mesh Pro was purchased by Unity and is now offered for free, so not using it would be a huge mistake. You get a ton of benefits with no performance hit. I was able to transfer the entire Text from my game to TMP with a few days of work and saw rendering quality improvements nearly everywhere. The material system and font assets TMP use are a bit confusing at first, so I do recommend thoroughly learning how they work and then carefully organizing them in your project.

Shows a Unity window that displays a series of language fields and translations for "Exit".
A single localization stub from Asset Localization.

Asset Localization

https://assetstore.unity.com/packages/tools/localization/asset-localization-100473
What: "Open source, easy-to-use and generic localization system for Unity."
Why: Any project that plans on being localized into more than one language needs a localization system. What this does is create data stubs that are dynamically replaced as opposed to a hardcoded string. For example, you program a greeting in your UI to use the stub ID "Loc_Greeting" and the game automatically displays "Hello" while playing the English version and "Bonjour" when playing in French. Of course, it's up to you to provide the translations for each supported language that are attached to that particular stub.
My Thoughts: Asset Localization, while having a terrible, confusingly generic name has been useful in getting my localization system up and running. I've only needed to use it for strings, but it also supports localized audio clips and graphics. Once you have your objects set up, Asset Localization has a component you can slap on any game object which has a Text component and, at run time, Asset Localization's component will replace the string of the Text automatically based on the chosen language. This feature can also be applied to Text Mesh Pro components. Of course, you can optionally program this behavior manually and forego using the component. The biggest missing feature, in my view, is that Asset Localization has no way to export or import the localization data. Thus, I had to program my own solution that took all of the stubs and created a CSV file, as well as a tool for taking an edited CSV file and importing its new translations into the stubs. That was a small trade-off, given that Asset Localization is free and open-source.

A program window showing different sound assets and a timeline of audio. Many nobs at the bottom offer different audio effects such as volume or distortion.
The FMOD Studio editor.

FMOD Studio

https://www.fmod.com/studio
What: "FMOD Studio is an end-to-end solution for adding sound and music to any game. Build adaptive audio using the FMOD Studio authoring tools and play it in-game using the FMOD Studio audio engine."
Why: While, technically possible, programming adaptive audio inside Unity without a tool like FMOD would be a huge pain. FMOD supports all common adaptive audio needs: many types of modulation (not just pitch and volume, but also distortion and other audio effects) as well as dynamic music allowing you to control a song's progress based on the action in your game. The process for using FMOD involves creating parameters in FMOD then using Unity to program your game to pass values into these parameters. For example, you might add "Intensity" as a parameter for your game's music. Depending on how many enemies are close to the player, the game may set Intensity from 0 to 1.  FMOD can then take this value and move the volume of the track to be higher or even switch to an entirely different song when the player is surrounded by enemies. FMOD also allows you to make changes in the FMOD editor and test the effects of those changes live while Unity is running in play mode. FMOD will give your audio designers a familiar looking workplace (similar to a DAW) that lets them test ideas and changes without doing any coding in Unity.
My Thoughts: I've been really happy with the power using FMOD has brought to our team. I strongly recommend using an audio solution of this type. For indie devs, FMOD has a license similar to Unity's -- there's an income cap before you have to begin paying. When I began Stacks, FMOD's competitor, WWISE, did not have an option for indies, but I believe that has changed. I'd carefully research both options before picking one or the other.


The Tools I Wish I Had Used

Cinemachine: Cinemachine was released after I had already programmed most of my cameras in Stacks, but I believe it would have saved me a time to have this powerful official Unity plugin for camera programming.

A Tween Library: I love hand programming my own animations, but using a tween library would have given me a lot more functionality and possibly be more optimized than my own scripts. I've heard good things about DotTween and LeanTween.

Probuilder: Not the most useful for Stacks, but Probuilder is an absolute must for game's that require level design. It offers BSP level editing allowing you to create simple,  gray boxed geometry in the editor. Now offered free as an official Unity package.

Comments

  1. "Hi my loved one! I wish to say that this post is amazing, nice written and come with almost all vital info's. I would like to peer extra posts like this"

    무료야설
    립카페
    출장안마
    타이마사지
    바카라사이트

    ReplyDelete
  2. The History of the Casino - One of the Most Popular Casinos
    A relative newcomer to the world of online gambling, 오래된 토토 사이트 Wynn Las Vegas casinosites.one opened its doors gri-go.com to worrione a new audience of over 600,000 nba매니아 in 2017. This was the first casino

    ReplyDelete

Post a Comment