Skip to main content

Validation In Blueprint

This page shows how to build special-condition validation entirely in Blueprint.

Option 1: Reusable validation object

Create a Blueprint class derived from:

  • UEDInteractionConditionValidator

Then override:

  • ValidateInteraction

Inside that event you receive:

  • Context (FEDInteractionValidationContext)
  • InOutResult (FEDInteractionValidationResult)

To deny interaction:

  • set InOutResult.bAllowInteraction to false
  • set InOutResult.DenyReason to the deny reason you want
  • optionally set InOutResult.FailureMessage

Where to assign validators

Global validation

Assign validator objects in:

  • UEDPlayerInteractionComponent -> GlobalInteractionValidators

Use this for rules that should apply to every interaction for that player/controller.

Examples:

  • block all interactions while stunned
  • require a global gameplay state
  • disable interaction during menu/cutscene mode

Actor-specific validation

Assign validator objects in:

  • UEDInteractableComponent -> ValidationRules

Use this for interactable-specific checks.

Examples:

  • this door needs a key
  • this altar requires a quest stage
  • this machine needs power enabled

Because these are inline instanced objects, you can tune them per actor Blueprint instance/class.

Foliage-specific validation

Assign validator classes in:

  • Project Settings -> ED Interaction System -> InteractableFoliage -> ValidationRuleClasses

Use this for foliage-only requirements.

Examples:

  • ore requires a pickaxe
  • tree requires an axe
  • herb requires a harvesting skill

Option 2: Override on the player interaction component

If you have a custom Blueprint subclass of UEDPlayerInteractionComponent, you can override:

  • ValidateInteractionSpecialConditions

This is useful when:

  • the rule depends on player state
  • you want centralized project-specific logic
  • you want to avoid creating many small validator objects

Useful context fields

Common fields from FEDInteractionValidationContext:

  • InteractableTag
  • InteractableActor
  • InteractableComponent
  • InstigatorController
  • InstigatorPawn
  • bIsFoliageInstance
  • FoliageInstanceComponent
  • FoliageInstanceTransform
  • InteractionLocation
  • InteractionMethod
  • bHasFoliageData
  • FoliageData

Good defaults:

  • SpecialCondition
  • DeniedByInteractable
  • ValidationFailed

You can also reuse other deny reasons if they make sense for your UI flow.