Your use of the term “static” is slightly confusing to me… I think you mean the base unchanging data of your ZapEffect thingy perhaps?? Either way… static has a very specific meaning in C# code and it is NOT something you would likely want here.
Generics also have their own issues with the Unity editor, but you can get what you want I think.
Let me throw you out this little tidbit of info, using ScriptableObjects for an RPG system:
ScriptableObject usage in RPGs:
ALSO: interfaces might be very useful to combine with ScriptableObjects above:
Using Interfaces in Unity3D:
Check Youtube for other tutorials about interfaces and working in Unity3D. It’s a pretty powerful combination.