Skip to content

UMageItWorldMarkersSubsystem

Base Class: ULocalPlayerSubsystem
Interfaces: FTickableGameObject

UMageItWorldMarkersSubsystem is the core management system for handling 3D world markers projected onto the 2D screen. Being a ULocalPlayerSubsystem, it is automatically instantiated per local player, making it highly efficient and easy to access without manual initialization.

It handles marker registration, dynamic visibility testing (with performance-friendly chunking), crosshair interaction, and screen edge behavior.

Right-click anywhere in an Event Graph and search for Get MageItWorldMarkersSubsystem.

To access the subsystem in C++, get the local player from the player controller:

if (APlayerController* PC = GetWorld()->GetFirstPlayerController())
{
if (ULocalPlayer* LocalPlayer = PC->GetLocalPlayer())
{
UMageItWorldMarkersSubsystem* MarkerSubsystem = LocalPlayer->GetSubsystem<UMageItWorldMarkersSubsystem>();
}
}
  • bVisibilityTestEnabled (Boolean): Toggles distance-based visibility checks for markers.
  • MarkerVisibilityTestChunkSize (Integer): Determines how many markers are tested for visibility per frame. Default is 10. Set to 0 to disable chunked testing.
  • ScreenEdgeGap (FMargin): The padding/margin from the edge of the screen where markers will clamp when the target object is off-screen.
  • CachedViewportSize (FVector2D): Read-only property storing current viewport dimensions.
  • CachedSafeZone (FMargin): Read-only property storing the current platform safe-zone margin.
  • bCrosshairInteractionEnabled (Boolean): Enables or disables logic for markers reacting when the player aims at them.
  • CrosshairInteractionRadius (Float): The screen-space radius (in UI units) around the crosshair where a marker is considered “hovered”.
  • FocusRadius (Float): A secondary radius used for highlighting or focusing markers near the center of the screen.
  • MarkerUnderCrosshair (UMageItWorldMarkerComponent*): Read-only reference to the specific marker currently targeted by the player.

  • RegisterMarker(UMageItWorldMarkerComponent* MarkerComponent) -> void
    Registers a new marker with the subsystem. Typically called automatically on BeginPlay by UMageItWorldMarkerComponent.
  • UnregisterMarker(UMageItWorldMarkerComponent* MarkerComponent) -> void
    Removes the marker from tracking. Automatically called on EndPlay or destruction of the component.
  • GetRegisteredMarkers() -> TArray<UMageItWorldMarkerComponent*>
    Returns an array of all markers currently tracked by the subsystem, regardless of visibility.
  • GetVisibleMarkers() -> TArray<UMageItWorldMarkerComponent*>
    Returns an array of markers that are currently visible on the screen.
  • GetConditionalVisibilityMarkers() -> TArray<UMageItWorldMarkerComponent*>
    Returns markers that have dynamic visibility conditions applied.
  • SetCrosshairInteractionRadius(float NewRadius) -> void
    Updates the interaction radius dynamically at runtime (useful for weapon switching or zooming).
  • SetFocusRadius(float NewRadius) -> void
    Updates the focus detection radius dynamically.
  • UpdateMarkerVisibility(UMageItWorldMarkerComponent* MarkerComponent, bool bVisible) -> void
    Force-updates the visibility state of a specific marker, bypassing chunked visibility checks.