Use the Juicy Actions integration when reusable Action assets should request Ultimate Character Controller behavior or react to Ultimate Character Controller events without creating a separate scene script for every sequence.

Install the integration

  1. Install Juicy Actions and verify an Action Runner (ActionRunner) with a simple configured action. Its Action Executor is an embedded serializable object, not an attachable component.
  2. Sign in to Opsive Downloads, download the Juicy Actions integration, and import UltimateCharacterControllerJuicyActions.unitypackage. The bridge does not exist in the base product’s Integrations folder before this download; importing it creates the integration files in the project.
  3. Let Unity compile, then search the Juicy Actions selector for an Ultimate Character Controller action such as Set Character Ability.
  4. Add Action Runner to the intended character for an owner-based action, or use a supported Action On Event component. Configure its embedded executor and each UCC action’s target references. Putting a runner on an unrelated GameObject does not make another character its implicit target.

Choose an action or event

  • Character actions: Add Character Force, Adjust Character Item Amount, Remove Character Item, Spawn Character Item, Set Character Ability, Set Character Animator Parameter, Set Character Attribute, Set Character Movement Type, and Wait For Character Event.
  • UCC event triggers: Ability Active, Attribute Change, Camera View Type, Damage, Death, Gameplay Input, Grounded, Item Equip, Item Pickup, Jump, Land, Movement Type, Object Impact, and Respawn.
  • Blackboard and Conditions: Character Blackboard Populator and Character Conditional Helper expose project-selected Ultimate Character Controller values and predicates to Juicy Actions.
  • Extension points: Juicy Actions Ability and Juicy Actions Module let an Ultimate Character Controller Ability or modular item action participate in an Action sequence.

Build a first workflow

  1. Add Action Runner to the intended character and configure its embedded Action Executor to set one named Attribute or start one known Ability. Use explicit target fields when the action supports a different target.
  2. Run it and verify the request against the selected character.
  3. Add a matching event-owner component, such as Action On Land, and configure its embedded sequence.
  4. For the first event sequence, use actions that finish promptly. Disabling the event owner unregisters its trigger listeners but does not reliably cancel an already-running wait in the supplied implementation. Before adding waits, implement explicit cancellation of the running executor or its actual run token, and verify the wait releases its own subscription.
  5. Add item, camera, or movement operations once ownership and cleanup are stable.

Verify in Play Mode

  1. Inspect the requested Ability, Attribute, item amount, movement type, or Animator parameter before and after the Action.
  2. Force Ultimate Character Controller to reject an ability request and confirm the sequence takes its intended failure path.
  3. Fire the selected event twice and confirm the Action does not register duplicate callbacks.
  4. Start a wait, then disable the owner before sending the awaited event. The supplied owner can still let that wait continue; verify explicit executor/run cancellation before using this flow. Test death, respawn, perspective changes, and reload with the same cleanup.

Troubleshooting

Symptom Check Fix
Ultimate Character Controller actions are absent. Check Juicy Actions, the bridge package, and compilation. Install the dependency first, remove duplicate bridge files, and reimport.
An Action changes the wrong character. Check the target reference and Blackboard population. Assign the intended Ultimate Character Controller root explicitly before using dynamic lookup.
An ability request has no effect. Check Ultimate Character Controller ability presence, index, blockers, and normal Can Start rules. Configure the ability through Ultimate Character Controller first, then request that working ability from Juicy Actions.
An event sequence continues after its owner is disabled. The event owner’s StopAllActions does not cancel its actual _cts run or embedded executor. Explicitly cancel the running executor or the token that owns that run. Do not rely on disabling the owner to release a Wait For Character Event action’s separate subscription.
An event fires more than once. Check duplicate owners and surviving wait subscriptions. Keep one trigger owner and verify both trigger unregistration and actual running-action cancellation.

Cancellation boundary

CharacterEventAction.OnDisable unregisters its own UCC events and calls the base StopAllActions. That base method cancels entries in _actionTokenSources, but the inspected execution path stores its cancellation source in _cts and never populates that dictionary. It also does not call the embedded executor’s StopAllActions. Consequently an active Wait For Character Event can retain its separate event subscription after the owner is disabled. A corrected owner must cancel the actual run/executor and let the wait’s cancellation cleanup execute.