Create shared variables for match-owned data such as current target, group identity, and reinforcement state, then bind corresponding task fields to those variables.

Update a target from code

using System.Collections.Generic;
using BehaviorDesigner.Runtime;
using UnityEngine;

public class TacticalTargetDriver : MonoBehaviour
{
    [SerializeField] private BehaviorTree m_BehaviorTree;

    public void SetTargets(List<GameObject> targets)
    {
        m_BehaviorTree.SetVariableValue("TacticalTargets", targets);
    }
}

Bind Target Group to a GameObject List variable named TacticalTargets. Supply the authoritative target list before starting the maneuver. An empty list makes the task acquire targets through Target Tag instead.

See Accessing Variables from non-Task Objects for the complete local and global variable API.

Change targets and maneuvers

A running maneuver follows the transforms of its cached targets, but changing Target Group does not replace that cache. Abort the participating tasks, update the target list, and start the maneuver again to change the target set. Apply the same coordinated restart when changing leadership or replacing the maneuver.

Use a conditional abort when health, ammunition, a grenade, or a higher-priority target must interrupt a Running tactical action.

Spawn and pool agents

Assign shared group and target data before starting the maneuver. Stop the tactical task before disabling or pooling an agent so stale members do not remain in group-arrival or slot calculations.

Keep target selection and authoritative damage in the game system. The Tactical Pack should consume accepted target data and call the configured interfaces; it should not independently bypass team, cooldown, networking, or health rules.

Reinforcement state

Scope request variables so only intended responders see them. Clear or cancel requests when the target dies, the requester is removed, or the tactical need ends. Test the no-responder path and a responder interrupted by a higher-priority branch.