Status Effect system with dynamic removal conditions

So unfortunately you can’t use the interface as a property effect because Unity just doesn’t support serializing it. That’s a Unity limitation, rather than an interface/C# limitation. Just a quark of their serialization engine.

As for this though:

    //PoisonExplosion.cs
    public class PoisonExplosion : MonoBehaviour
    {
    // So I can explicitly define each property type...
        public DamageOverTimeEffect poisonEffect;
        public KnockbackEffect knockbackEffect;
    //OR I can bring them both in as StatusEffects...
        public StatusEffect poisonEffect, knockbackEffect;
    
        //... but when it comes time to apply these effects with either approach I've got to cast them as IStatusEffect for UnitStatusEffects to know what to do with them:
    
        core.statusEffects.ApplyEffect((IStatusEffect)knockbackEffect);
        core.statusEffects.ApplyEffect((IStatusEffect)poisonEffect);
    }

That’s peculiar. If Those types (StatusEffect, DamageOverTimeEffect, KnockbackEffect) all implement IStatusEffect, the compiler would know this and not force you to cast it.

What is the error you’re getting? Maybe there’s something off in the code that isn’t shown here in what you posted.

In tangentially related things to interfaces, if you want to see other usefulness for them. Go check out this thread I was also in today: