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.