Boss Stomp
Use Boss Stomp to add one or more heavy, discrete camera impulses, such as footsteps from a nearby boss or the impact of a large object. The Effect belongs to the character, but it always sends its force to that character’s currently attached Camera Controller.
Before you begin
- Configure a character with Ultimate Character Locomotion.
- Attach the intended Camera Controller to the character. Boss Stomp has no target field and cannot start without an attached camera.
- Keep other Character Effects inactive while Boss Stomp runs in released Version 3.
- Ensure the Opsive Scheduler is active when Repeat Count is greater than
1or is-1. The first stomp is immediate, but later stomps useScheduler.ScheduleFixed.
Add and test Boss Stomp
- Select the character root and open Ultimate Character Locomotion > Effects.
- Select the add (
+) button and choose Boss Stomp. - Set Inspector Description to a useful editor label such as
Heavy Footsteps. - Set Repeat Count to
3and Repeat Delay to0.6for a clear test with one immediate stomp and two scheduled stomps. - Leave the direction and strength fields at their defaults for the first test.
- Turn the Boss Stomp row’s Enabled toggle off, select the row, and enable Start When Enabled.
- Enter Play Mode and turn the row on.
The row should show (Active) between the first and final stomp, then clear after the third. Once the tuning is approved, turn Start When Enabled off, leave the row enabled, and connect the intended ability, damage response, or script trigger.
Choose the impulse
| Field | Released default | Behavior |
|---|---|---|
| Positional Stomp Direction | Down (0, -1, 0) |
Direction of the secondary positional force sent to every View Type on the attached Camera Controller. |
| Positional Strength | 0.5 to 1 |
Chooses a random positional magnitude within this range for each stomp. |
| Rotational Stomp Direction | Forward (0, 0, 1) |
Axis of the secondary rotational force. |
| Rotational Strength | 10 to 15 |
Chooses a random magnitude within this range. Each stomp also randomly chooses the positive or negative direction. |
| Repeat Count | 0 |
Intended total stomp count, with the mandatory initial stomp counted immediately. Both 0 and 1 produce one stomp; -1 repeats until explicitly stopped or disabled. |
| Repeat Delay | 1 |
Delay in seconds before each later stomp is invoked from the Scheduler’s FixedUpdate queue. |
The Effect does not move the character or select a world-space target. It adds secondary camera position and rotation forces with zero rest accumulation. Camera View Types decide how those forces appear, so first- and third-person results can feel different even with the same values.
Choose how it starts and stops
Boss Stomp uses the shared Character Effect lifecycle:
- The first stomp occurs immediately in
EffectStarted. - A finite Repeat Count stops the Effect immediately after the final stomp.
-1keeps scheduling stomps until another system callsStopEffectorTryStopEffect, or turns Enabled off.- Stopping the Effect cancels the pending scheduled stomp and clears its configured State.
- Starting it from an ability’s Start Effect Name does not make it stop when that ability ends.
The base Effect exposes no dedicated start or stop UnityEvent, and Boss Stomp declares none. Use a finite count for a self-contained response. For an indefinite sequence, make the same gameplay system that starts the Effect responsible for stopping it.
Camera and multiplayer ownership
Boss Stomp listens for the character’s camera-attachment notification. When a camera attaches, that Camera Controller becomes the Effect’s destination; when it detaches, the destination becomes empty and CanStartEffect returns false.
Character Effects are not network synchronized. In multiplayer, replicate the boss-step or impact event through the project’s networking layer, then start Boss Stomp only for the local camera that should perceive it. Starting the Effect on a remote character without an attached camera fails, and starting it on another local character targets whichever camera is attached to that character.
Released Version 3 limitations
- Repeat Count
0and1both produce one stomp because the initial stomp runs before the repeat comparison. - Repeat Delay is passed to the Scheduler without validation. A finite count with delay
0collapses every stomp into the same call; combining delay0with Repeat Count-1recursively schedules without yielding. Scheduler delay-1has separate recurring-event semantics and can leave a callback that Boss Stomp no longer tracks. Use a positive delay. - If a later stomp cannot be scheduled because the Scheduler is unavailable or disabled, the first stomp still occurs but a finite multi-stomp Effect can remain active without reaching its stop condition. Restore the Scheduler or disable the Effect.
- The released controller assigns active effects a one-based index but removes them as though the index were zero-based. Avoid overlapping Boss Stomp with any other Character Effect; if an existing system overlaps effects, stop them in reverse start order.
- Boss Stomp does not affect the Animator and has no built-in network synchronization or start/stop UnityEvents.
Check the editor setup
Before Play Mode, confirm:
- the intended Camera Controller is attached to this character;
- Repeat Delay is greater than
0; - a Repeat Count of
-1has a definite stop owner; - no other Character Effect will overlap this sequence; and
- Inspector Description and any configured State identify the intended use.
Verify in Play Mode
- Trigger a finite sequence with Repeat Count
3and count one immediate impulse plus two delayed impulses. - Confirm that the row shows (Active) between stomps and clears after the third.
- Verify that each positional magnitude remains within Positional Strength and that rotational direction can vary between stomps.
- For a character with both perspectives, test first and third person. Both use the attached Camera Controller, but their View Types can respond differently.
- Start an indefinite sequence with Repeat Count
-1, then invoke its planned stop. Confirm no later stomp occurs and its configured State clears. - In multiplayer, verify the effect independently on the owning client and every observer that receives the replicated trigger.
Troubleshooting
| Symptom | Check | Fix |
|---|---|---|
| Boss Stomp does not start. | Check whether a Camera Controller is currently attached to the character and the effect row is enabled. | Attach the intended camera and enable the row before triggering it. |
| The wrong camera moves. | Check which character the Camera Controller currently owns. Boss Stomp has no camera selector. | Attach the intended Camera Controller to this character before starting the Effect. |
Repeat Count 0 produces one stomp. |
Check the immediate-first-stomp semantics. | This is expected; use a value greater than 1 for multiple finite stomps. |
| All finite stomps happen together or Play Mode hangs. | Check for Repeat Delay 0, especially with count -1. |
Stop Play Mode if necessary and use a positive delay. |
| The first stomp occurs but the Effect never finishes. | Check the Opsive Scheduler and whether a later callback was registered. | Restore or enable the Scheduler, then disable the stuck Effect before testing again. |
| An indefinite sequence continues. | Check whether the owning system called StopEffect, TryStopEffect, or turned Enabled off. |
Add and verify an explicit stop path. |
| Another active Character Effect stops or updates incorrectly. | Check whether the effects overlapped. | Avoid overlap in released Version 3 or stop them in reverse start order. |
| A remote player does not see the stomp. | Check whether the network layer started it for that client’s local camera. | Replicate the trigger and invoke Boss Stomp locally for each intended observer. |
Related tasks
Developer details
BossStomp.CanStartEffect returns true only when the inherited m_CameraController reference is non-null. EffectStarted resets the internal count and calls the first stomp synchronously. Each stomp calls CameraController.AddSecondaryPositionalForce and AddSecondaryRotationalForce, increments the count, then either schedules the next FixedUpdate callback or calls StopEffect.
Retrieve the configured instance with UltimateCharacterLocomotion.GetEffect<BossStomp>(). Start and stop it through TryStartEffect and TryStopEffect; both expect a non-null Effect reference. EffectStopped cancels the pending ScheduledEventBase, then clears it.