Building for Flexibility and Efficiency with Mighty Action Heroes’ Data

Every designer who has ever managed data in Unity probably felt like the engine isn’t really… designer-friendly, at times. Maybe you’re setting up scriptable objects to create weapon A. Say it takes five different scriptable objects linked together to make one weapon. Now you want to make weapon B, so you’d have to copy it, rename it, and adjust the stats. It probably doesn’t sound too bad…. until you have to make 50 of them. You have to do the same thing 48 more times.

The lack of what seems to be quality-of-life features for designers, like the ability to bulk rename scriptable objects, makes it so you have to waste precious minutes doing unsexy and tedious work. At Mighty Bear Games, we never shy away from unsexy and boring tasks. But we always find a way to improve and work more efficiently with what resources we have. Whether it’s creating custom tools to automate processes or DIY designer recipes to reduce the risk of human errors, I’ll spill all the beans today on how the designers at Mighty Bear Games (with the help of the ever-lovely engineers) make managing and editing data a lot less painful.

Know What You Want

“Well, duh” might be your initial to this but bear with me! If you want to make things easier, you have to be able to take a deep dive into the feature and understand what you need.

No one knows the feature better than you, the guy with the funny numbers (game designer)! Have a sit down with the engineers, and figure out how you would like your data to be structured and what they can do to help you. Note them down in the feature design document, so it doesn’t get missed during implementation. After all, the person who’s going to take care of them is going to be you.

Photo by GettyImages on Unsplash

Modular Data is Ur Bestie

Once you know what you want, you need a way to make it as modular as possible. Making it modular would mean something like, if you make an ability for the heroes you should be able to adjust a lot of parameters without the engineer’s help (things like range and damage). You can even add effects to it to make entirely new abilities (adding knockback, stun, etc.). You can make a bunch of “preset” data and attach it to others, effectively reusing it and not needing to make new data. We had a practice of doing this in Disney Melee Mania, but now with Mighty Action Heroes, we‘ve taken it a step further.

Here’s an example of what “modular data” looks like to us at Mighty Bear Games. This is one of the guns’ scriptable objects that dictates the cost of shooting. In the image below, it means the cost for shooting is -1 ammo each time.

Example data for one of the guns’ ammo cost

What if I want to make a gun that uses my health as ammo, with every shot reducing my health? We’re able to do that by swapping out the affected attribute and adjusting the multiplier! Now every shot you make reduces your character’s HP by 100.

Adjusted data for the gun’s ammo cost, making it cost health instead of ammo

Right now, the duration multiplier is set to “instant”. We can even modify this further to gradually reduce our health every time we fire the weapon. Or we can even change the affected attribute to something else. What if it’s a weapon that increases your movement speed every time you fire? A weapon that reduces your max armor every time you fire? The possibilities are (almost) endless with this kind of setup, and keep in mind this is just for the cost of firing!

Data Auto Generator Helps Me (And My Old Man Back)

This was something I specifically requested from the engineers for a few features. One of the pain points I had was creating the data itself. Not editing or adjusting numbers, just creating the data itself takes some time. Because of its modular nature, I needed to set up around 10–12 scriptable objects every time. We had that many scriptable objects because we separate some of the things like ammo cost, maximum ammo, damage, etc. And that’s only for one rarity! Since our weapon has three rarities each, that’s about 30 scriptable objects per weapon. And we have 10 different weapons, making it 300 scriptable objects in total!

The way that I worked last time was I would copy all of the scriptable objects of one of the weapons I had already made into a separate folder. I renamed both the folder and all of the scriptable objects before tweaking the numbers and effects and attaching the data to one another. As you can imagine, this took quite some time. Some of the time taken was seemingly menial tasks, like renaming the files so they match the naming convention for that weapon.

So I asked the engineers if we can make a tool that auto-generates a “default” weapon data in their correct folders, with the correct names, and scriptable objects already attached to one another. That way most of my time will be spent on actually making the weapons (adjusting the numbers and effects) instead of renaming things.

With this fancy-schmancy tool, all I gotta do is put down the name for the weapon and its rarity then click the Create Data Assets button. All the data will magically appear in one folder and I can get started on adjusting values almost immediately!

Weapon generator tool

Google Sheets Data Importer Tools

Most designers use Google Sheets to document things like values for certain weapons, drop tables for loot boxes, and the like. The problem with this is that it’s possible for the documentation sheet to get outdated if you don’t update it immediately and highly likely that people (who are from other divisions) see inaccurate data. It’s also a bother to go into Unity, make your values, go back to the sheet, and input them for documentation’s sake. You’ll do this multiple times since your feature might need balancing patch after patch. Not to mention, the default Unity table isn’t that great and is very prone to user errors.

To make this process simpler, I requested a tool from the engineers: Google Sheets data importer tool! They’ve used Baking Sheet as a base and modified it to suit Mighty Action Heroes. I don’t need the game take in input for all the fields that are in the scriptable objects, just a few that are tedious to do in Unity are enough. One of them would be the drop table we’re using for our grenade blueprints. Here’s how said drop table would look like in Google Sheets.

Example data for one of the grenade blueprints

I would simply just need to press a button in Unity to import all of the information above! If it’s an existing ID, it’ll override the previous contents of the drop table. If it’s a new ID, it’ll create a new drop table. This saves up so much time when you need to set up multiple drop tables as you can just copy and paste in Google Sheets and import the data from Unity in one go!

This would also help with documentation as I can just direct people to this sheet. For example, if QA is testing the drop rates for each item on the supply crate to see whether they’re accurate or not, I can simply send them the link to the Google Sheets since it would have the newest data (because I’m actively using it to manage the data in Unity)!

Designers can improve efficiency further by using some built-in tools from Google Sheets. I’ll give a few examples.

Data Validation and Dropdowns

There is no way to verify that we need to have the user use a certain data type in Google Sheets in order for it to be usable in Unity. For example, the DropEntryItemData column in the previous screenshot can only recognize "data item" type in Unity, else it confuses itself. How do we make sure that people type only that?

Google sheets shows a marker on the cell if the data input is incorrect

With data validation of course! You can right-click the column and add in data validation to either remind users if they’re not typing with “data_item_” as a format or reject the input entirely.

If there isn’t much to choose from like rarity types, we can use dropdowns instead.

Example of a dropdown

Macros and Formulae

Remember what I mentioned earlier about copy-pasting? You can even make that more efficient by using macros! You can set up macros to automatically create an entry for a supply crate drop table for example. Macros might still take a while to complete once activated (depending on how many steps you have in the macro), but that just means you can do some other task while you wait.

I’m sure most designers include funky formulas with references on another sheet in their documentation, but get this: you can even include formulas in your macros!

Keeping Notes

These tools are made because I showed up with notes on how implementation was during post-mortems. Every time I have a pain point on a feature I’m working on, I took note of it so we can improve on it in the future. This helps me design tools and data that are more designer friendly in other upcoming features. It helps to research if there are any plugins in the Unity Asset Store that would help with my issues prior to the post-mortems, to see how they resolve them and if they are the solution to it.

I strive to improve design processes and data management so it’s easy and seamless for everyone involved! One of these days, managing data would be simple enough that even my cat can do it.

Photo by Sereja Ris on Unsplash

That’s all from me! I hope this article was enjoyable and helpful — feel free to leave some comments if you have other tips for how to make data more designer-friendly, and don’t forget to give me claps!

Building for Flexibility and Efficiency with Mighty Action Heroes’ Data was originally published in Mighty Bear Games on Medium, where people are continuing the conversation by highlighting and responding to this story.