unity scriptable object as base class
public enum AttributeType 
{   
 	Elemental,   Category
}  
public class abstract Attribute : scriptableObject {  
   protected AttributeType attribute;
   public Attribute { get { return attribute; }
}   
  //Children have to override this.   public abstract void effect(GameObject _target); }