5 Clever Ways to Use Scriptable Objects in Unity

Scriptable Objects are one of the most powerful tools in Unity, but many developers don’t realize just how versatile they can be. Whether you’re new to Unity or a seasoned pro, there’s always something new to learn about Scriptable Objects. Here are five clever ways you can use them to make your game development process smoother and more efficient.

  1. Modular Pieces of Code
    Let’s start with something really cool—using Scriptable Objects as modular pieces of code. Imagine you’re making a game with different weapons, and each weapon needs to know how to target enemies. Should it go for the closest one? The farthest? Maybe it should just randomly pick one?

Here’s where Scriptable Objects can help. You can create a base Scriptable Object, let’s call it AttackTargetBase, with an abstract method like GetDamageableTarget. Then, you can make different Scriptable Objects for each targeting type—one for closest, one for random, and so on. The best part? You can keep adding more targeting types later without having to mess with your main code. It keeps everything nice and tidy!

  1. Dynamic Data Holder (Between Scene Loads)
    Ever needed to carry data from one scene to another? For example, maybe your player selects a bunch of weapons in the menu, and you need to load that selection into the game scene. Usually, scene loads mean you lose all that data.

Not with Scriptable Objects! You can drop the selected weapons into a Scriptable Object, and when the game scene loads, all that data is still there. Just a quick note—this won’t save the data if you close and restart the game, but it works perfectly within a single play session in Unity.

  1. Replace Enums with Scriptable Objects
    Enums are great, but they have their limitations. Let’s say you’ve got different weapon types like physical, armor, and healing. Sure, you could use an enum for this, but what if you want to add more types later on?

Using Scriptable Objects instead of enums lets you expand easily. Plus, you can store extra information in each Scriptable Object, like names, sprites, or descriptions. This approach is much more flexible and helps future-proof your game.

  1. Event Holders
    Now, let’s talk about using Scriptable Objects as event holders. Imagine you’ve got a skill selection window in your game. The player picks a skill, and something needs to happen, like applying the skill effects.

You can create a Scriptable Object for each skill, with an OnSelection action. When the player picks a skill, you just trigger that action. This makes your game code more modular and easier to manage because you can reference these events anywhere you need to. It’s a clean and efficient way to handle game events.

  1. Variable Holder (Yes, Really!)
    Okay, this one might sound a bit strange at first, but hear me out—using Scriptable Objects as variable holders. Let’s say your weapon has a damage variable. You can create a Scriptable Object, name it Stat, and store the damage value in there.

This gives you a portable variable that you can use anywhere in your project. It’s like having a magic floating variable that just works, without the hassle of dealing with dependencies or messy code. It’s simple but incredibly effective!

Wrapping Up
And there you have it—five clever ways to use Scriptable Objects in Unity. These tips can help you make your game development process more modular and flexible, which can save you a lot of headaches down the road.

Scriptable Objects are super powerful, and with a solid design, they can be a game-changer for your projects. If you found these tips helpful, try them out in your own projects and see how they work for you. Happy coding, and keep creating!

If you enjoyed this post, don’t forget to share your thoughts in the comments. I’d love to hear how you’re using Scriptable Objects in your games!

Check out the video version here

Newsletter Updates

Enter your email address below and subscribe to our newsletter

Leave a Reply

Your email address will not be published. Required fields are marked *