[5.8][Motion Design] Effector visualizer permanently disappears after moving the actor with the gizmo

Summary

[Motion Design] Effector visualizer permanently disappears after moving the actor with the gizmo, and cannot be restored without recreating the Effector

What Type of Bug are you experiencing?

Virtual Production

Steps to Reproduce

  1. Create a new project with the Motion Design (Avalanche) and ClonerEffector plugins enabled.
  2. In a level, create a Cloner actor with a Grid layout and its default attached clone.
  3. Create an Effector actor with Box type and link it to the Cloner.
  4. Confirm the inner and outer visualizer boxes are drawn in the viewport.
  5. Move the Effector actor using the translation gizmo. The visualizer is still drawn correctly during the drag.
  6. Release the mouse button.

Expected Result

The inner and outer visualizer boxes stay visible at the new location after the drag is released.

Observed Result

The visualizer disappears the moment the mouse button is released and never comes back.

None of the following restores it:

  • toggling “Visualizer Component Visible” or “Visualizer Sprite Visible”
  • changing Inner Extent or Outer Extent
  • changing the Shape type and changing it back
  • deselecting and reselecting the actor
  • toggling the Effector’s Enabled property

The only way to get a visible visualizer again is to delete the Effector and create a new one, at which point the same sequence reproduces the issue.

The Effector itself keeps working correctly - clones are still affected. Only the editor-only visualization is lost.

Ruled out during testing:

  • Not temporal AA related: reproduced identically with TSR and with TAA.
  • Not visualizer alpha related: raising Visualizer Inner/Outer Color alpha from the default 0.1 in Project Settings > Motion Design > Cloner & Effector does not change the behavior.

POSSIBLE CAUSE (from the plugin source)

In CEEffectorTypeBase.cpp, MarkVisualizerDirty() only schedules the regeneration ticker when the previous handle is invalid:

if (IsExtensionActive() && !VisualizerTickHandle.IsValid())
{
    VisualizerTickHandle = FTSTicker::GetCoreTicker().AddTicker(...);
}

VisualizerTickHandle is reset in exactly one place, inside OnVisualizerTick(), which means only if the scheduled tick actually executes. If that tick is dropped (component re-registration on drag release seems a plausible trigger), the handle stays valid indefinitely and every later MarkVisualizerDirty() call silently becomes a no-op, with no recovery path exposed in the UI. This matches the observed behavior exactly, including why changing Inner Extent or Outer Extent has no effect.

The IsExtensionActive() half of the same guard would produce identical symptoms if the extension is deactivated during re-registration and never reactivated.

Suggested fix: reset VisualizerTickHandle when the ticker is removed or when the component is re-registered, and/or re-mark the visualizer dirty on component re-registration.

Affects Versions

5.8

Platform(s)

Windows