Inspection System

Updated May 25, 2026

Overview

The Inspection System is a modular Blueprint framework for presenting readable, audible, and viewable interactables to the player. It supports traditional item inspection, readable documents, audio logs, video playback, pickup-oriented inspection, and world-space inspection where the actor remains in the level instead of being moved into a model viewer.

For shared setup guidance, see the Migration Guide and Integration Guide. Use the System Atlas to look up functions, variables, events, components, and ownership references. Use this page for Inspection System-specific setup, runtime behavior, extension points, and integration notes.

At a high level, the system is built around a shared inspection data structure, a central player-owned inspection component, and a set of inspectable actor blueprints that decide how the experience is presented. A single data row can define the inspectable’s type, visual representation, document pages, optional narration, optional reaction dialogue, optional databank injection, and playback configuration.

The system is deliberately data-driven. In the common setup, an inspectable actor references a row in DT_Inspection and resolves its full F_Inspection payload at runtime. For more custom cases, the same actor can bypass the row-handle workflow and use custom inspection data supplied directly via exposed variables.

  • Supports multiple inspection experiences through one shared data model.
  • Lets actors resolve inspection data from DT_Inspection or from directly supplied custom data.
  • Separates presentation logic across specialized child blueprints instead of forcing one actor to handle every case.
  • Tracks inspected entries so first-time-only reactions can be gated cleanly.
  • Can optionally inject entries into a databank and optionally grant the inspected item to inventory.

Introduction screenshot

Inspection types and intended use cases shown in the example map.

Inspection Types at a Glance

The enum and demo content show the following supported inspection modes:

TypePurpose
Document ReadDisplays readable document content using the document settings block, with optional multiple pages and standard reaction handling.
Document NarratedUses the document workflow but also supports narrated audio to accompany reading.
Audio RecordingUsed for audio-first inspectables such as radio messages, recordings, or voice logs.
Item ExaminationUsed for close examination style inspection where the player focuses on the object itself and can trigger examine events on tagged points.
Item InspectionGeneral item viewing workflow using mesh settings and the model viewer for rotate-and-zoom presentation.
Level SequenceReserved for sequence-driven playback style inspectables.
Video PlaybackUsed for inspectables that must assign a media material and play a media source during inspection.

Core Assets and Data Model

The system revolves around one master struct, one data table, a small set of supporting structs, and a component/actor split that separates manager logic from presentation logic.

Core Assets and Data Model screenshot

Core enums, the main F_Inspection struct, and the shared data table asset.

F_Inspection is the central payload passed through the system. It contains all data needed to present an inspectable: identity, viewing rules, mesh references, document contents, audio configuration, reaction behaviour, playback settings, and databank options.

Enumerations Explained

EnumRole in the system
E_Inspectable_TypeDefines what kind of inspection experience is being created so downstream logic knows whether to treat the payload like a document, audio log, item inspection, or playback-driven object.
E_Inspection_CreationTypeDefines how the inspection is presented: pushed into a databank info panel, fullscreen in game, fullscreen in UI, or fullscreen in game without the model viewer.

Creation type is important because multiple flows reuse the same data. The same inspectable can be opened directly from the world, shown in a fullscreen overlay, or surfaced inside an information/databank panel depending on where the interaction originates.

Structures Explained

The inspection system is intentionally split into focused structs so each part of the payload remains understandable and reusable. DT_Inspection rows are built from these same structures, which means the live runtime data mirrors the authoring workflow in the editor.

Structures Explained screenshot

Expanded struct definitions used by the system.

F_Inspection

FieldDescription
General SettingsHigh-level identity and behaviour flags such as tag, type, name, description, icon, and inventory grant behaviour.
Viewing SettingsCamera and interaction presentation rules including rotation/zoom permission, distance, FOV limits, and base rotation offset.
Mesh SettingsVisual asset references used during inspection, including static mesh, skeletal mesh, optional inspect actor, and mesh position offset.
Document SettingsReadable document title, body pages, and optional narrated audio.
Reaction SettingsOptional predefined dialogue and first-inspect-only response map.
Audio SettingsAudio label, sound asset, and autoplay rules for audio-first inspection.
Playback SettingsMedia player, media source, video material, target slot index, looping, and autoplay configuration.
DatabankControls whether inspection should generate databank information and whether it should inject a default or override databank payload.

F_Inspection_General_Settings

FieldDescription
Inspectable TagUnique gameplay tag used as the inspectable’s identifier and for inspected-state tracking.
Inspectable TypeThe enum value that determines what experience should be built.
Is World InspectableUsed to distinguish inspectables that should remain in the world and use the world-inspection flow.
Inspectable NamePlayer-facing title used in UI and databank content.
Inspectable DescriptionPlayer-facing description or summary text.
Inspectable IconIcon used by UI and databank surfaces.
Should Add This Item To Inventory On InspectionOptional tag or identifier used when the inspected item should also be granted to inventory.

F_Inspection_Viewing_Settings

FieldDescription
Allow Rotation and ZoomEnables or blocks manual object rotation and FOV-based zoom changes.
Min Zoom FOVLower clamp used by the model viewer zoom logic.
Max Zoom FOVUpper clamp used by the model viewer zoom logic.
Distance From ObjectBase viewing distance used by the model viewer camera setup.
Base Rotation OffsetStarting rotation offset applied before player-controlled rotation is added.

F_ItemInspection_MeshInfo

FieldDescription
Static MeshStatic mesh to present during inspection.
Skeletal MeshSkeletal mesh alternative when the inspectable should use a skeletal presentation.
Interactable Inspect ActorOptional dedicated inspect actor for more advanced presentation cases.
Mesh Position OffsetVector offset used to position the mesh correctly in the model viewer.

F_Inspection_Document_Details

FieldDescription
Document TitleReadable heading shown in the document UI.
Document ContentsArray of text pages used when the document contains multiple pages or sheets.
Document Narrated AudioOptional sound asset used to accompany reading.

F_Inspection_Audio_Settings

FieldDescription
Audio NameText label for the audio entry.
Audio To Play When InspectingSound base reference played while the item is being inspected.
Auto PlayWhether the assigned sound begins automatically on open.

F_Inspection_Reaction_Settings

FieldDescription
Predefined Dialogue To PlayDialogue/voice reference used as the primary response when a dialogue manager is available.
First Inspect ResponseMap used to support a different line the first time the inspectable is seen.

F_Inspection_Playback_Settings

FieldDescription
Media PlayerMedia player instance used for video playback control.
Media SourceMedia source assigned at runtime.
Video MaterialMaterial instance applied to the inspect mesh slot for playback.
Slot Index To Assign Material ToMaterial slot index that receives the video material.
Should LoopWhether playback loops.
AutoplayWhether playback begins automatically after source assignment.

F_Inspection_Databank

FieldDescription
Should Add Item To DatabankMaster toggle for databank injection.
Inject This Databank InfoOptional explicit databank row or payload to use.
Override Databank List Info ClassOptional widget/class override for databank presentation.
Add To This Databank CategoryGameplay tag category used for organization inside the databank.

DT_INSPECTION

DT_Inspection is the main authoring surface for the system. Each row stores one complete F_Inspection payload, which means a designer can configure documents, audio logs, item view settings, reactions, databank behaviour, and playback data without changing Blueprint logic.

DT_INSPECTION screenshot

DT_Inspection row editing, with a placed actor example referencing a row directly from the details panel.

  • Placed inspectable actors can point to a DT_Inspection row through the Inspectable Row handle.
  • If Use Custom Inspection Data Via Expose On Spawn is disabled, the base actor resolves its data from the row handle at runtime.
  • The same row format works for multiple inspection types, which keeps authoring consistent across documents, items, audio, and video.
  • For bespoke runtime cases, the row-driven workflow can be bypassed and the actor can use directly supplied inspection data instead.

The data table structure is especially useful for teams selling the system to buyers, because it gives them one obvious editor surface for most common use cases. The actor blueprint then acts as the presenter rather than the place where all content must be hardcoded.

AC_PC_Inspection

AC_PC_Inspection is the live manager that receives create, close, destroy, and inspected-entry events. The provided graphs show that it is responsible for spawning or updating the active model viewer, caching the created inspection widget, removing the widget when inspection ends, and maintaining the list of already inspected IDs.

AC_PC_Inspection screenshot

AC_PC_Inspection routes create/close/destroy events and owns the active model viewer lifecycle.

Observed function/eventResponsibility
Event Create_InspectableReceives F_Inspection plus creation type and forwards it into the update/create modelviewer flow.
Event Close ModelviewerRemoves the modelviewer UI and restores player input state when appropriate.
Event Destroy current modelviewerFully destroys the active modelviewer actor and then clears the reference.
Event Add Inspected theseAdds an inspection ID into the component cache so first-inspect logic can be gated.
Update ModelviewerIf a modelviewer already exists it is updated in place; otherwise the BP_Item_Model_Previewer is spawned and cached.
Remove Modelviewer UIRemoves the created widget from its parent and closes the related UI flow.
Destroy ModelviewerCalls the UI removal step first, then destroys the actor and broadcasts a completion event.

BP_INSPECT_BASE

BP_Inspect_Base is the common actor used for standard inspectables. It holds the shared components, exposes the inspection data setup in the details panel, resolves DT_Inspection rows when needed, and coordinates the standard interaction pipeline.

BP_INSPECT_BASE screenshot

BP_Inspect_Base resolves inspection data, plays reactions, and optionally injects databank content.

Observed graph/functionPurpose
Construction ScriptReads the selected DT_Inspection row and applies the configured static mesh to the placed world actor.
Event InteractCaches the interacting player controller and routes into the shared inspection flow.
Get Inspectable Info Via Tag MapperWhen custom data is not being used, reads the F_Inspection row from the row handle and stores it locally.
Add Inspectable To DatabankBuilds or selects the databank payload and forwards it into the databank manager.
Play Sentence On InspectChecks whether the inspectable has been seen before and then selects the correct reaction flow, including first-inspect dialogue.
Add to inspected list in the componentPushes the inspectable tag into AC_PC_Inspection so duplicate first-time reactions do not repeat.
Picked_Up_EventExtension point used by pickup-oriented children to close the loop back into parent pickup behaviour.

The base blueprint is therefore both the content bridge and the policy layer. It decides where data comes from, when databank content should be created, when a dialogue line should be spoken, and when the inspectable should be considered already seen.

Specialized Inspect Actors

The specialized child blueprints reuse the base data model but present it differently depending on the intended gameplay result.

Child blueprintSpecialization
BP_Inspect_ModelviewerOverrides interact behaviour to spawn a modelviewer-driven inspection and bind back to the resulting widget.
BP_Inspect_PickupBuilds an inspection payload from item data, supports pickup flows, and can route back into the parent interaction logic when the player claims the item.
BP_Inspect_WorldKeeps the object in the world, creates the inspection widget directly, blends the player view to an in-world camera, and handles optional media playback on the world actor.

Specialized Inspect Actors screenshot

Representative runtime flows for modelviewer, pickup, and world inspection children.

BP_ITEM_MODEL_PREVIEWER

BP_Item_Model_Previewer is the visual inspection actor spawned by AC_PC_Inspection. It owns the camera, light room, item pivot, render handling, zoom and rotation behaviour, video material setup, and examination traces while an item is actively being viewed.

Observed function/eventPurpose
Create Inspector WidgetCreates or binds the main inspection widget used during viewing.
Set Inspection Data DefaultsApplies mesh, distance, rotation, pivot, and camera defaults from F_Inspection.
Add Rotation Of InspectableAdds rotation input to the item pivot, but only when rotation/zoom is allowed.
Add Camera ZoomChanges camera FOV and clamps it between the configured min and max values.
Execute Examine EventCalls the examine event on a current interactable inspection item if one is under focus.
Get Used Mesh ComponentReturns the active static or skeletal mesh component so downstream functions can modify the correct target.
Event Update Model ViewerUpdates the existing previewer instance with new F_Inspection data instead of always recreating it.
Initialize Video PlaybackAssigns the video material, opens the media source, applies looping, and optionally begins playback.

Core Runtime Flows

The provided graphs reveal a few recurring runtime patterns that buyers should understand, because they explain why the system is flexible even though it is data-driven.

Standard modelviewer inspection flow

A placed inspectable receives interaction, resolves its F_Inspection payload, optionally queues databank and reaction behaviour, then asks AC_PC_Inspection to create or update the modelviewer. AC_PC_Inspection either updates the existing previewer or spawns BP_Item_Model_Previewer and stores the active reference.

  • The create request carries both the F_Inspection payload and the creation type.
  • The previewer is designed to be reused for fast successive inspections instead of always being recreated.
  • The created inspection widget is cached so it can later be removed cleanly.

World inspection flow

BP_Inspect_World skips the standard modelviewer path and instead creates the inspection widget directly, passes in inspection data and reaction type, blends the player view to its own camera, disables movement, and binds a widget-deactivated event for cleanup.

  • This is the correct flow for screens, terminals, fixed world displays, or any inspectable that should stay where it is.
  • If playback settings are configured, the world actor also applies the video material to the configured mesh slot and opens the media source.

Databank injection flow

The base actor checks the databank block of F_Inspection and either injects an explicit databank payload or builds one from inspection fields such as title, description, icon, audio, and video.

  • This allows the inspection system to serve both as a live interaction and as a content authoring bridge into the databank.
  • The row does not need a bespoke databank entry unless the buyer wants tighter control over how the databank card is assembled.

First-inspect reaction flow

Before playing a sentence, the base blueprint checks whether the inspectable tag already exists in the component’s inspected list. If it has not been seen before, the first-inspect response can be used; after that, subsequent inspections fall back to the standard predefined dialogue flow.

  • This is how the system avoids repeating introductory bark lines every time the same object is opened.
  • The inspected-state cache is maintained by AC_PC_Inspection rather than by each actor separately.

Pickup inspection flow

BP_Inspect_Pickup shows how inspection can be fused with item data and pickup behaviour. It constructs a custom F_Inspection payload from item attributes, opens the inspect UI, and when the player confirms pickup it routes back into the parent interaction logic.

  • This is useful when an item should be looked at before being claimed.
  • The same flow can still add databank data and inventory output if the configuration calls for it.

Details Panel / Important Variables

The world instance screenshot shows the intended buyer-facing setup: the placed actor exposes a simple toggle for direct custom data and an Inspectable Configuration block that can either store a full F_Inspection payload or point to a DT_Inspection row.

Details Panel / Important Variables screenshot

Example placed BP_Inspect_Modelviewer instance using a DT_Inspection row.

FieldWhy it matters
Use Custom Inspection Data Via Expose On SpawnWhen enabled, the actor should use directly supplied inspection data instead of resolving a row from DT_Inspection.
Inspectable DataInline F_Inspection payload for more bespoke or runtime-driven setups.
Inspectable RowStandard row-handle driven configuration path for most authored content.
Target Arm Length (BP_Inspect_World)Determines the world inspection camera distance when using the in-world camera setup.
Current Interacting Player Controller / widget cachesRuntime-only references used to manage the live experience and cleanup.

How to Use and Extend the System

Below are the most likely questions a buyer will have when first integrating the system. These are written deliberately as practical setup guides rather than low-level Blueprint commentary.

How do I create a simple readable document?

  1. Create or reuse a placed BP_Inspect_Base or BP_Inspect_Modelviewer actor.
  2. Leave Use Custom Inspection Data Via Expose On Spawn disabled.
  3. Assign DT_Inspection as the data table inside Inspectable Row and select or create a row.
  4. In that row, set Inspectable Type to Document Read or Document Narrated.
  5. Fill in Document Title and Document Contents, and optionally assign Document Narrated Audio.
  6. If you want the player to rotate and zoom the physical document mesh, make sure the mesh and viewing settings are also populated.

How do I add a standard inspectable item that the player can rotate and zoom?

  1. Create a DT_Inspection row and set Inspectable Type to Item Inspection.
  2. Populate Mesh Settings with a static mesh or skeletal mesh.
  3. Adjust Viewing Settings such as Min Zoom FOV, Max Zoom FOV, Distance From Object, and Base Rotation Offset.
  4. Place a BP_Inspect_Modelviewer in the world and point Inspectable Row at the row you created.
  5. On interaction, the system will create the model viewer and hand the payload to BP_Item_Model_Previewer.

How do I use custom data instead of a DT_Inspection row?

  1. Enable Use Custom Inspection Data Via Expose On Spawn on the placed actor or when spawning it dynamically.
  2. Populate the Inspectable Data struct directly.
  3. This is the better option when the object is generated at runtime or when its text, icon, or mesh must be assembled from another system such as item data.

How do I make an inspectable add itself to the databank?

  1. Open the row or inline payload and expand the Databank block.
  2. Enable Should Add Item To Databank.
  3. Either provide a specific databank payload override or leave the override empty so the system builds databank information from the inspection payload.
  4. Set the databank category tag so the entry is organized correctly.

How do I make the player hear a line only the first time they inspect something?

  1. Populate Reaction Settings.
  2. Assign the normal predefined dialogue and then populate First Inspect Response for the one-time variant.
  3. Make sure the inspectable tag is unique, because inspected-state tracking is tag-driven.
  4. Once the item is inspected, BP_Inspect_Base adds the tag to the component cache and subsequent inspections will not reuse the first-time response.

How do I create an audio log?

  1. Set Inspectable Type to Audio Recording.
  2. Fill Audio Settings with the display name and sound asset.
  3. Enable Auto Play if you want playback to begin immediately after opening the inspectable.
  4. You can still combine this with reaction settings or databank injection if desired.

How do I create a video or screen-based inspectable?

  1. Use BP_Inspect_World when the video should remain on the actor already placed in the level.
  2. Set Inspectable Type to Video Playback.
  3. Populate Playback Settings: Media Player, Media Source, Video Material, target material slot index, and looping/autoplay options.
  4. Place the actor, verify the correct mesh slot index, and test the cleanup path to ensure the original material is restored when inspection closes.

How do I inspect a pickup before the player collects it?

  1. Use BP_Inspect_Pickup.
  2. Let it construct or receive the inspection payload from item data.
  3. When the player confirms the pickup, the child blueprint routes back into the parent interaction logic and can still use the inventory/databank rules from the inspection data.

How do I make a world inspectable instead of moving the item into a model viewer?

  1. Use BP_Inspect_World.
  2. Set up its SpringArm, Camera, and optional MediaSound components as needed.
  3. Tune Target Arm Length and camera blend values so the inspection view feels correct.
  4. This is the best option for terminals, control panels, wall notes, screens, and environmental props that should not be detached from the world.

How do I tune rotation and zoom?

  1. Use Viewing Settings inside F_Inspection.
  2. Allow Rotation and Zoom must be enabled for both rotation and FOV zoom input to function.
  3. Use Base Rotation Offset to correct awkward default orientation.
  4. Use Min/Max Zoom FOV to clamp how close and how far the player can zoom.
  5. Distance From Object should be used together with mesh offsets so the item is framed correctly from the moment it opens.

Summary

The Inspection System is a flexible presentation framework rather than a single hardcoded interaction. One shared data model powers documents, items, audio logs, video playback, databank entries, and world-space inspection. AC_PC_Inspection manages lifecycle and inspected-state tracking, BP_Inspect_Base resolves and prepares content, specialized child blueprints decide how the experience is presented, and BP_Item_Model_Previewer handles the live visual viewing experience when a model viewer is needed.

For a buyer, the main strength of the system is that most content creation happens in DT_Inspection and in placed actor details rather than inside Blueprint graphs. Once the author understands how the shared F_Inspection payload is structured, they can build a wide range of inspectable content without changing the core framework.