Skip to main content

Custom Tooltip Object

Add tooltip functionality to non-widget objects (Actors, Components, etc.) You can create custom tooltip trigger logic by implementing the ILayeredTooltipObject interface.

Restrictions

Important: The ILayeredTooltipObject interface is currently C++ only.

  • Cannot be implemented in Blueprints
  • For Blueprint-only projects, refer to ULayeredTooltipDefaultComponent

Implementing the Interface

Required Functions:

UCLASS()
class AMyCustomActor : public AActor, public ILayeredTooltipObject
{
GENERATED_BODY()
public:
// Required implementation
virtual bool ShouldObjectTriggerTooltip() const override;
virtual bool OverrideTooltipPositionInViewport(FVector2D& OutPosition) override;
virtual FLayeredTooltipObjectDelegate& GetTooltipCloseDelegate() override;

// Optional implementation
virtual bool IsTriggerObjectVisible() const override;
virtual void OnObjectTooltipOpened() override;
virtual void OnObjectTooltipClosed() override;
virtual void OnObjectTooltipPinned() override;

private:
FLayeredTooltipObjectDelegate TooltipCloseDelegate;
};

Component Implementation:

UCLASS(BlueprintSpawnableComponent)
class UMyTooltipComponent : public UActorComponent, public ILayeredTooltipObject
{
GENERATED_BODY()
public:
virtual bool ShouldObjectTriggerTooltip() const override;
virtual FLayeredTooltipObjectDelegate& GetTooltipCloseDelegate() override;
virtual bool OverrideTooltipPositionInViewport(FVector2D& OutPosition) override;

private:
FLayeredTooltipObjectDelegate TooltipCloseDelegate;
};

Registering with the Tooltip System

void AMyCustomActor::BeginPlay()
{
Super::BeginPlay();

FLayeredToolTipTriggerData TriggerData;
TriggerData.TooltipData.Add("Type", "Actor");
TriggerData.TriggerPayload = this;

ULayeredTooltipFunctionLibrary::RegisterObjectAsTooltipTrigger(this, TriggerData);
}

void AMyCustomActor::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
ULayeredTooltipFunctionLibrary::UnregisterTooltipTriggerByObject(this);
Super::EndPlay(EndPlayReason);
}

Core Function Descriptions

ShouldObjectTriggerTooltip()

  • Core function that determines whether to display a tooltip
  • May be called every frame, so performance considerations are necessary
virtual bool ShouldObjectTriggerTooltip() const override
{
// Implement custom trigger conditions
return bIsInteractable && IsPlayerNearby();
}

OverrideTooltipPositionInViewport()

  • Customize tooltip position
  • Return false to use default cursor position
virtual bool OverrideTooltipPositionInViewport(FVector2D& OutPosition) override
{
// Calculate custom position
if (CalculateCustomPosition(OutPosition))
{
return true; // Use custom position
}
return false; // Use default position
}

GetTooltipCloseDelegate()

  • Provides a delegate to force-close tooltips from outside the plugin
  • Must be returned by reference
virtual FLayeredTooltipObjectDelegate& GetTooltipCloseDelegate() override
{
return TooltipCloseDelegate;
}

Lifecycle Events

virtual void OnObjectTooltipOpened() override
{
// Logic when tooltip is displayed (e.g., highlight effect)
}

virtual void OnObjectTooltipClosed() override
{
// Cleanup when tooltip is closed
}

virtual void OnObjectTooltipPinned() override
{
// Enable additional functionality when tooltip is pinned
}

Reference: ULayeredTooltipDefaultComponent

Default component included with the plugin:

  • Automatically detects the actor's first collision component
  • Handles mouse over events automatically
  • Suitable for simple actor tooltips

Important Notes

  • Interface is currently C++ only (cannot be implemented in Blueprints)
  • Performance optimization of ShouldObjectTriggerTooltip() is required
  • Must unregister when actor is destroyed
  • Delegate must be returned by reference