Quick answer: Use ActorHasTag for tag check, separate from Cast To. Or use Blueprint Interface for polymorphic checks.
You assume tag implies class. Cast still fails because the actor wasn’t the expected type, just tagged similarly.
The Fix
BP:
Branch:
ActorHasTag(Other, "Damageable")
True → Branch:
Other->ImplementsInterface(BPI_Damageable)
True → Apply Damage(Other)
// Or interface-only
Branch: Implements Interface(Other, BPI_Damageable)
True → Apply Damage(Other)
Tags filter; interfaces enable polymorphic dispatch. Pick one approach — usually interface for behavior queries.
Verifying
Damageable actor: handler runs. Tagged but non-implementing: skipped. Untagged: skipped.
“Tag for filter. Interface for behavior.”
Related Issues
For BP Interface defaults, see BPI defaults. For Add Unique struct, see add unique.
Tag filters. Interface dispatches.