I'm creating a spell system in my game, similar to the one in the Magicka series if you've played those. There's an explanation of them in the next paragraph, so if you know how it works you can skip it. In Magicka, you can combine different elements to cast spells, in a kind of recipe system. You use Earth and Fire and it'll create a flaming boulder which you can launch at enemies. Water and Cold will create ice shards, which you can machine gun out. There's even different contexts in the game, like you can cast Earth and Shield regularly to create a wall out of earth, or you can cast it on yourself to create armor out of it. There's even special combos which have unique spell effects in the game, where if you have the exact right combination it'll cast. I'm struggling to figure out what kind of architecture I want in order manage the spell system, and am a little hesitant to move forwards, as I don't want this to become a pain later on in development. I want one that has a recipe system similar to one in Magicka, where you can chain different elements together to cast a spell. Currently, I'm using ScriptableObjects for the recipes, which takes in multiple symbols and has a resulting Spell enum which it spits out. So this seems pretty straight-forward right now, but I'm trying to figure out how to organize my spells, since each has a unique effect. My initial thought was to create a parent class of Spell in order for all of the spells to inherit some properties and methods from, like ManaCost and CastSpell(), however this seemed inefficient since it's creating a bunch of objects which need to be initialized and they're just sitting around most of the time. Not only that, I wouldn't be able to edit them in any way in the Inspector. My second thought was some kind of abstract static class, in which I would give in the Spell type and it would call the spell based on the class. This doesn't seem to be possible though, as you can't override a static method and a class can't be abstract and static, which makes sense. My third thought was to edit my Spell Recipe ScriptableObject to somehow hold a delegate, which could be easily edited, however it doesn't seem like I can reference a method from a ScriptableObject. I don't know enough about it to really say for sure though, so I'd be happy for information about this. Pretty much asking if there's a clean way to do this, or if anyone has any ideas on how they would go about it. td;lr, is there a good way to implement an Action/Event/delegate property in ScriptableObjects, to allow you to select a method in another script?