Skip to main content

Special Condition Validation

Type: Plugin/Engine only for the validation API itself. External systems may be required depending on your gameplay rule.

This example shows how to use the new validation API with:

  • a reusable validator object
  • an actor interactable
  • a foliage-compatible validation path

Goal

Imagine you want:

  • doors to require a key state
  • ore nodes to require a pickaxe state

Instead of hardcoding that in the plugin, you create validators.

Example validator

#pragma once

#include "CoreMinimal.h"
#include "Validation/EDInteractionConditionValidator.h"
#include "MyRequireInteractionTagValidator.generated.h"

UCLASS(BlueprintType, EditInlineNew, DefaultToInstanced)
class UMyRequireInteractionTagValidator : public UEDInteractionConditionValidator
{
GENERATED_BODY()

public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Validation")
FName RequiredPawnTag = TEXT("CanUseSpecialInteractables");

virtual void ValidateInteraction_Implementation(const FEDInteractionValidationContext& Context, FEDInteractionValidationResult& InOutResult) override;
};
#include "MyRequireInteractionTagValidator.h"

#include "GameFramework/Pawn.h"

void UMyRequireInteractionTagValidator::ValidateInteraction_Implementation(
const FEDInteractionValidationContext& Context,
FEDInteractionValidationResult& InOutResult)
{
Super::ValidateInteraction_Implementation(Context, InOutResult);

if (!InOutResult.bAllowInteraction)
{
return;
}

if (!IsValid(Context.InstigatorPawn) || !Context.InstigatorPawn->ActorHasTag(RequiredPawnTag))
{
InOutResult.bAllowInteraction = false;
InOutResult.DenyReason = EEDInteractionDenyReason::SpecialCondition;
InOutResult.FailureMessage = FText::FromString(TEXT("Missing required interaction tag."));
}
}

Actor usage

Assign the validator inline on:

  • UEDInteractableComponent -> ValidationRules

That lets each actor Blueprint choose its own rule set.

Foliage usage

Assign the validator class on:

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

That lets each foliage mesh config use a dedicated validation rule.

Why this is better than hardcoding

  • works in C++
  • works in Blueprint
  • works for actors
  • works for foliage
  • keeps project gameplay rules outside plugin internals