Groups & Cycles

Group settings

Each Group's More block tunes how its Actions play together:

Property

Purpose

Gates

Gate the whole group, it only runs when every entry passes. Same address grammar as everywhere else (Tag Grammar Reference), a trailing :!State negates that entry.

RepeatPolicy

Bitmask: BlockWhenDone refuses a re-run once at rest at its own end pose, BlockWhilePlaying refuses one while mid-play. Both set by default.

ConfirmTime

Hold-to-confirm duration before the group commits (bind the hold-progress to a UI ring via OnInteractHoldProgress).

EasingFunction / EasingExponent

Motion easing across the timeline.

LoopStartTime

Where @Loop sends the group back to.

RampInTime / RampOutTime

Ease a looping motion up to speed and back down: a fan spinning up, an escalator winding down.

StopSpeedFactor

Multiplier on total duration when stopping mid-play for a smooth landing (non-looping groups only).

bCanBeInterrupted

Whether a new trigger can cut this group short.

bCarryObjects / CarryHeight

Ferry objects resting on or inside the animated target. See Carrying: ferrying objects on a moving target.

OffsetMode / OffsetTarget

Whether poses are relative to the component's start (ComponentStart), its most recent play start (StartPose), a target, or the raw parent space.

DeltaSpace

Axis frame the Location/Rotation deltas travel in: Relative (parent space), Local (this Component's own rotation), or World (fixed axes, cancels the Actor's yaw).

Carry is decided once, at the start

bCarryObjects scans for what to ferry when the group starts playing, and that set is then fixed for the whole motion. Drop something into a drawer that is already opening and it will not be picked up, it rides only if it was there when the drawer began to move.

This is a tradeoff:

  • Predictable: what a group carries is decided at one instant you can reason about, not on whichever frame something was inside.

  • Cheap: a continuous re-scan needs an overlap query per moving object per frame. A single scan at trigger time does not.

Requirements for a carried object:

  • The scan volume is the target's bounds extended upward by CarryHeight.

  • A carried object's mesh must be Movable: a Static mesh is skipped (and says so in the log).

  • For multiplayer, the carried object must be a replicated actor with replicated movement, or remote clients will not see it move (see Multiplayer).

Cycles

A Cycle is an ordered list of Group names. Each trigger moves it one step: closed → opening → open → closing → closed, and so on. StartIndex seeds where it begins for actors placed pre-opened, pre-broken, etc.

Cycle auto-detect

Place a door half-open in the level. On BeginPlay, the IC reads the actor's current pose and syncs the cycle index so the next press moves away from where you left it, no manual index bookkeeping for hand-placed variety. This also means a designer can place 10 identical doors at 10 different open states and each one plays correctly on first press.

Choosing Cycle vs Group triggering

  • Trigger a Cycle by name when you want stateful, alternating behavior (press = toggle open/closed).

  • Trigger a Group directly when you want a specific action regardless of current state (a "Reset" button that always plays the Close group, never Open).

  • Trigger an Action directly (rare) for the finest-grained control, bypassing Group-level settings like gates and easing.

See also