Unlocking Abilities

Assuming that you have implemented my Condition PropertyDrawer, I would argue that using Conditions is the best way to go. Your SkillTree will need to be an IPredicateEvaluator, and I would make a Predicate of something like HasSkill(string)