Host project migrated from PROSERVE_UE_5_5 to PROSERVE_UE_5_7 in April
2026. CLAUDE.md, memory index, project notes, and build reference now
point at the new path / target / engine version. The 5.5 host is
flagged deprecated to avoid accidental builds against it.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Several attempts were made to fix a PIE-specific RecastNavMesh registration
failure that occurs when the editor's "Play" button calls OpenLevel(BaseLevel)
from inside a PIE session — the level's RecastNavMesh ends up pending-kill
and UE silently substitutes an empty AbstractNavData fallback, breaking AI
pathfinding. Workarounds tried (and reverted): cascading re-registrations
through RegisterNavData / OnInitializeActors / AddNavigationSystemToWorld /
Build / SpawnMissingNavigationData; intermediate transition map; duplicated
BaseLevel sublevel suffixed _default. None worked — the cause is internal
to PIE's OpenLevel handling.
Standalone Game and packaged builds initialize the nav system correctly,
so production is unaffected. Document the workflow so future contributors
don't waste time chasing this PIE-only bug.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Ground snap:
- When an actor has no colliding components at all (e.g. a VR start
marker, placement helper, or any BP whose collision is only enabled
on entering editor mode), SnapActorToGround now anchors the PIVOT
directly on the ground instead of falling back to the full-bounds
bbox bottom. The full-bounds bottom could be far below the pivot
(helper meshes, arrows, visual markers) and was lifting objects
hundreds of units into the air.
- Actors with collision keep the original behavior (collision-bbox
bottom rests on the ground).
Catalog spawn:
- Always snap to ground (drop the bAutoSnapToGround gate) — a user
clicking in the catalog expects the object to land on the ground
every time; the flag is kept for gameplay-side spawning via
SceneLoader.
- SpawnActor now uses AlwaysSpawn instead of
AdjustIfPossibleButAlwaysSpawn so UE never pushes the actor
vertically to resolve overlaps — SnapActorToGround is the
authoritative placement step.
CLAUDE.md workflow rule:
- Document that behavior / logic changes require explaining the plan
first and waiting for go-ahead; only diagnostic-only additions
(temporary UE_LOG) are fine without approval.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Extend the EditableInterface with two new BlueprintNativeEvents so property
combos can show human-friendly labels while storing technical values:
- GetCustomOptionsWithValuesForProperty returns TArray<FPS_Editor_PropertyOption>
where each pair carries a DisplayName (shown in the combo) and a Value
(written to the property via ImportText). Wins over the legacy flat-string
variant when non-empty. Ideal for TSubclassOf / TSoftClassPtr properties
driven by a DataTable lookup where the stored value is a class path.
- GetCurrentDisplayForProperty lets the actor authoritatively resolve the
DisplayName from the current stored value, for cases where the automatic
reverse lookup (normalize class path, exact-match) isn't reliable — e.g.
several Values collapse to the same label, or the format is user-specific.
UI refresh now asks the actor first, then falls back to a normalized match
(strips the `TypeName'...'` wrapper from ExportText output so it compares
apples to apples with a plain /Game/Path.X_C string).
Same logic duplicated across both widget implementations (MainWidget and
MainWidget_Legacy) since the project can switch UI mode at runtime. The new
CLAUDE.md rule makes that requirement explicit.
Also documented in CLAUDE.md:
- Editor-vs-gameplay execution boundary: which interface methods fire where,
including the gotcha that OnEditorPropertyChanged *does* fire in gameplay
on the server when the timeline animates a property.
- UI modes: keep all MainWidget* implementations in lockstep to avoid the
"I edited the file but nothing changed" class of bug.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Runtime editor plugin with UE viewport-style camera controls:
- ZQSD/Arrows movement (always active), E/A for up/down
- LMB: pan (horizontal move + yaw), RMB: free fly look
- Alt+LMB / MMB: orbit around focal point, scroll: zoom
- HUD with controls help, cursor auto-hide during camera ops
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>