Companion System

v1.2.0

Components

Complete reference for all CPS components, ScriptableObjects, and MonoBehaviours

Convention: Components marked Singleton need exactly one instance in the scene. ScriptableObject assets are created via the Project context menu. MonoBehaviour components are added to GameObjects.

CompanionManager

Singleton

Central singleton managing all active and stored companions. Add to a persistent GameObject in your scene. Handles summoning, recalling, storage, group commands, and formation updates.

Properties

PropertyTypeDescription
MaxActiveCompanionsintMaximum companions in scene (from CompanionSettings)
ActiveCompanionsList<ICompanionBrain>Currently active companions (read-only)
StoredCompanionsList<CompanionData>Companions in storage (read-only)
ActiveCountintNumber of active companions
CanSummonMoreboolTrue if below the MaxActiveCompanions limit

Methods

SummonCompanion(definition, position, owner) — Spawn and initialize a companion
RecallCompanion(brain, delay?) — Remove companion from scene (optional VFX delay)
RecallAllCompanions() — Recall all active companions
StoreCompanion(brain) — Move companion to storage
RetrieveFromStorage(definition, position, owner) — Spawn a stored companion
GroupSetState(state) — Set all companions to same state
GroupSendCommand(command) — Send command to all (skips unsupported)
GroupSetFormation(formation) — Change formation for all companions
FindActiveByDefinition(definition) — Get brain by definition
IssueCommand(brain, command) — Issue command on a specific brain
SwapActive(stored, active, position?, owner?) — Store one active companion and retrieve a stored one in its place (see Swapping Companions below)
CanSwapActive(definition, brain, owner) / ValidateSwap(...) — Pure checks; return a CompanionSwapCheck
RecruitCompanion(gameObject, definition, owner) — Turn a scene Character into a managed companion (see Recruiting a Scene Character below)
DismissCompanion(definition) — Remove a companion from the party, leaving its GameObject in the scene
CanRecruitCompanion(...) / ValidateRecruit(...) — Pure checks; return a CompanionRecruitCheck
FindActiveByGameObject(gameObject) / IsCompanion(gameObject) — Query whether a GameObject is currently an active companion

CompanionBrain

MonoBehaviour

The central component on each companion prefab. Drives state machine, motor control, follow behavior, idle system, bonding, and events. Initialized by CompanionManager on summon.

Properties

PropertyTypeDescription
DefinitionCompanionDefinitionThe companion species/type
CurrentStateCompanionStateCurrent state (Following, Idle, Waiting, Commanded, etc.)
ProximityStateProximityStateDistance to formation slot (Beside / Near / Far)
OwnerICompanionOwnerThe character this companion follows
CustomNamestringDisplay name (overrides definition name)
CompanionIdstringUnique runtime identifier
IsInitializedboolTrue after Initialize() completes
ActiveCommandCompanionCommandCurrently executing command (or null)
BondLevelfloatCurrent bond 0–1
BondTierBondTierStranger / Familiar / Loyal / Bonded
IsOwnerStationaryboolTrue when owner hasn't moved for Idle Enter Delay
IsVisitingInterestPointboolTrue when navigating to or at a POI
BondingBondingBehaviorBond level management (internal)
EventsCompanionEventsInspector-wirable UnityEvents

Methods

SetState(state) — Transition to new state (fires events)
IssueCommand(command) — Execute a command (validates against CommandSet)
SendCommand(command) — Group-safe command (silently skips if unsupported)
CompleteCommand() — Signal command is done, return to Following
SetOwner(owner) — Transfer to a new owner at runtime

CompanionMotor

MonoBehaviour

The single boundary to GC2 Character Motion — no other CPS code touches GC2 movement directly. Provides follow, stop, teleport, speed control, gesture, and LookAt. Driver-aware: detects whether the Character uses the NavMesh Agent driver and can upgrade it for pathfinding. Added automatically to companion prefabs. See the Navigation & Following page for the full movement model.

Properties

PropertyTypeDescription
IsReadyboolTrue when GC2 Character is resolved
IsFollowingboolCurrently following a target
IsMovingboolCompanion is in motion
UsesNavMeshDriverboolTrue when the Character runs GC2's NavMesh Agent driver (native pathfinding)
DriverNamestringDisplay name of the active GC2 driver (e.g. "Navmesh Agent")
IsOnNavMeshLinkboolTrue while traversing a NavMesh / climb link
CurrentSpeedfloatCurrent movement speed (m/s)

Methods

StartFollow(target, minDist, maxDist) — Follow a Transform via GC2 Motion (pathfinds on the NavMesh driver)
StopFollow() — Stop following and halt movement
EnsureNavMeshDriver() — Upgrade the Character to the NavMesh Agent driver when a baked mesh is present
SetSpeed(speed) — Set movement speed
Teleport(position, rotation) — Instant reposition
LookAt(target) — Face a target via GC2 Facing layer
StopLookAt() — Remove LookAt layer
PlayGesture(clip) — Play animation clip as a gesture

CompanionOwnerAdapter

MonoBehaviour

Add to your Player Character to make it a companion owner. Bridges the GC2 Character to the ICompanionOwner interface, providing position, forward direction, and velocity tracking. Also records the breadcrumb trail companions follow while you move (see Navigation & Following). Auto-added by the Summon instruction if missing.

Properties

PropertyTypeDescription
OwnerTransformTransformOwner world transform
ForwardVector3Owner facing direction
VelocityVector3Current movement velocity
TrailLengthfloatLength of the recorded breadcrumb trail (m)
TrailPositionsIReadOnlyList<Vector3>Recorded breadcrumbs, oldest → newest

CompanionDefinition

ScriptableObject

Defines a companion type — its prefab, display name, follow/idle profile overrides, commands, personality, and reaction profile. Create via Create > Companion System > Companion Definition.

Create via:

Create > Companion System > Companion Definition

Properties

PropertyTypeDescription
DisplayNamestringName shown in UI
DescriptionstringTooltip description
CategoryCompanionCategoryPet / Ally / Mount / Summon / Other
IconSpritePortrait for party UI
PrefabGameObjectCompanion prefab (needs GC2 Character)
GuidstringAuto-generated unique identifier for save/load
FollowProfileFollowProfileOverride follow profile (falls back to Settings default)
IdleBehaviorIdleBehaviorProfileIdle behavior configuration
PersonalityCompanionPersonalityBonding speed and reaction intensity (optional)
ReactionProfileReactionProfileAudio/VFX reactions to events (optional)
CommandSetCompanionCommand[]Available commands for this companion type
IsMountableboolMetadata flag, off by default. Marks the companion as rideable (see Mount Metadata below)
MountPointNamestringName of the child transform on the prefab where a rider should be attached. Only shown when IsMountable is on

FollowProfile

ScriptableObject

Controls follow behavior parameters. Multiple profiles allow different companion types to move differently (e.g., a dog runs faster than a turtle).

Create via:

Create > Companion System > Follow Profile

Properties

PropertyTypeDescription
InnerRadiusfloatStop distance from owner (default: 2m)
OuterRadiusfloatRun-trigger distance (default: 8m)
TeleportRadiusfloatTeleport-trigger distance (default: 25m)
WalkSpeedfloatSpeed when Near proximity
RunSpeedfloatSpeed when Far proximity
AvoidanceRadiusfloatFormation spacing between companions
FormationOffsetVector3Base offset behind owner
StuckTimeoutfloatSeconds before stuck recovery (default: 3s)

Swapping Companions

CompanionManager.SwapActive stores one active companion and retrieves a stored one in its place, in a single call. It is built on the existing StoreCompanion / RetrieveFromStorage pair, and always stores first — so Max Active Companions can never be exceeded and a swap works even with a full party, where a plain Retrieve would be refused.

  • SwapActive(stored, active) — in-place: the incoming companion spawns where the outgoing one stood, with the same owner
  • SwapActive(stored, active, position, owner) — explicit position and owner
  • CanSwapActive(...) — ask first; returns CompanionSwapCheck.Ok, or the reason it would be refused
  • ValidateSwap(...) — the pure static version of the same check

A swap raises no new events — you get exactly one On Companion Stored followed by one On Companion Summoned, so existing listeners keep working unchanged.

CompanionSwapCheck values: Ok, NoDefinition, NoActiveCompanion, SameCompanion, AlreadyActive, NotInStorage, NoPrefab, NoOwner. All checks run before anything is mutated, so a refused swap leaves both companions untouched.

From visual scripting, use the Swap Companion Instruction — see GC2 Integration → Instructions.

Recruiting a Scene Character

No Dialogue module is required. RecruitCompanion turns a Character that already exists in the scene into a managed companion without spawning anything — the Character keeps its own GameObject and everything on it, and the Companion Definition supplies behaviour data only (its Prefab field is ignored). The target needs a Game Creator 2 Character component; CompanionBrain and CompanionMotor are added automatically.

  • RecruitCompanion(npcGameObject, definition, owner) — recruit
  • DismissCompanion(definition) — leaves the GameObject in the scene, frees the party slot, keeps the bond
  • IsCompanion(gameObject) / FindActiveByGameObject(gameObject) — queries
  • CanRecruitCompanion(...) / ValidateRecruit(...) — pure checks; return a CompanionRecruitCheck

CompanionRecruitCheck values: Ok, NoCharacter, NoDefinition, NotAGameCreatorCharacter, NoOwner, AlreadyRecruited, DefinitionAlreadyActive, PartyFull. As with SwapActive, all checks run before anything is mutated.

Dismiss vs Recall: RecallCompanion destroys the GameObject. DismissCompanion leaves it standing in the world with its CompanionBrain — and its bond level — intact, so the same character can be recruited again later without resetting the relationship. Both reuse the existing OnCompanionRecalled event, so party UI and save data stay in sync. See GC2 Integration → Instructions for the node-level recipe.

Mount Metadata

Be clear about what this is: the Companion Party System contains no riding code. Movement is GC2 Character plus CompanionMotor; parenting a player to a saddle, swapping the camera and handing over input are GC2 Character concerns, not companion-lifecycle concerns. What 1.2.0 adds is the two pieces CPS is actually the right owner of:

  • IsMountable — a flag on the definition, read by the Companion Is Mountable Condition, so you can gate your own mount interaction without writing C#
  • MountPointName — the name of the child transform a rider should be attached to. It is a name rather than a Transform reference because a ScriptableObject that describes a prefab cannot hold a scene reference.
Transform saddle = definition.FindMountPoint(companionInstance);
// or, without a definition:
Transform saddle = CompanionDefinition.FindMountPoint(companionInstance, "Saddle");

FindMountPoint searches the whole hierarchy including the root and inactive children, matches the name exactly (case-sensitive), and returns the first hit or null.

The flag is independent of the Mount Category on purpose — you can mark a large Pet as rideable without re-categorising it. For the recommended mount/dismount node pattern, see GC2 Integration → Mount Nodes.

Companion Vitals

A standalone health and secondary resource system that works without GC2 Stats. Add CompanionVitals to any companion prefab to enable HP, damage, healing, death, and auto-revive.

CompanionVitals MonoBehaviour

Property / MethodDescription
MaxHealthMaximum health points
CurrentHealthCurrent health (read-only)
HealthPercent0–1 fraction of max health
IsDead / IsAliveDeath state flags
IsInCombatTrue when recently damaged (CombatTimeout window)
IsInvulnerableGet/set — blocks all incoming damage
ResourceTypeNone / Mana / Energy / Stamina / Rage
CurrentResource / MaxResourceSecondary resource values
TakeDamage(amount, source)Apply damage; returns actual amount dealt
Heal(amount, source)Restore health; returns actual amount healed
HealToFull()Restore health to max
Die() / Revive(percent)Kill or revive at given health percentage
SpendResource(amount)Deduct resource; returns false if insufficient
RestoreResource(amount)Add to secondary resource
Inspector settings: MaxHealth, HealthRegen, RegenOutOfCombatOnly, ResourceType, MaxResource, ResourceRegen, CombatTimeout, DisableOnDeath, AutoReviveTime.

VitalsProfile ScriptableObject

A reusable template for vitals configuration. Assign in CompanionDefinition to apply the same stats to multiple companions of the same type. Create via Create → Companion System → Vitals Profile.

Death & State: When Die() is called, CompanionVitals automatically sets the companion's state to Recalled. On Revive(), it transitions back to Following.

Ability System

Companions can have up to 8 ability slots. Each ability is a ScriptableObject defining timing, cost, targeting requirements, and optional GC2 instructions that execute on cast.

CompanionAbility ScriptableObject

Create via Create → Companion System → Ability.

SectionProperties
IdentityAbilityId, DisplayName, Icon, Description
TimingCooldown (0–300s), CastTime (0=instant), TriggersGCD
CostResourceCost, HealthCostPercent
TargetingTargetType (None/Self/Friendly/Enemy/Ground), Range, RequiresLineOfSight
RequirementsMinBondTier, RequiresIdle
EffectsGC2 InstructionList, AnimationTrigger, CastSound, VFXPrefab
EventsOnCastStart, OnCastComplete, OnCooldownEnd (UnityEvents)

CompanionAbilitySet MonoBehaviour

Add to the companion prefab. Manages 8 slots, GCD, and cast state.

Property / MethodDescription
IsCastingTrue during a cast (cast time > 0)
IsOnGCDGlobal cooldown active
UseAbility(slot, target)Attempt to use ability in slot (validates requirements)
CanUseAbility(slot, target, out reason)Check usability without executing
SetAbility(slot, ability)Assign ability to slot
ClearSlot(slot)Remove ability from slot
ResetAllCooldowns()Instantly reset all ability cooldowns
CancelCast()Interrupt current cast
GetSlot(index)Get AbilitySlot runtime state by index
Bond Gate: Abilities with a MinBondTier set above Stranger will fail CanUseAbility until the companion's bond reaches that tier. This creates a natural progression mechanic.

Traits System

Traits are permanent modifiers assigned to companions. They apply stat multipliers, grant bonus abilities, and can spawn aura VFX. Use traits to create unique companions — a "Fierce" wolf that deals more damage, or a "Loyal" companion that gains bond faster.

CompanionTrait ScriptableObject

Create via Create → Companion System → Trait.

SectionProperties
IdentityTraitId, DisplayName, Icon, Description, Rarity (Common→Legendary), Category (Combat/Support/Utility/Social)
Stat ModifiersArray of StatModifier (stat type + value). Applied by CompanionTraitHolder.
AbilitiesBonusAbility (CompanionAbility) + BonusAbilitySlot — granted while trait is active
RequirementsMinBondTier, IncompatibleTraits[], RequiredTrait
VisualTraitColor, AuraPrefab (spawned on companion while trait is active)
EventsOnAssigned, OnRemoved (UnityEvents)
Rarity colors: Common (gray) · Uncommon (green) · Rare (blue) · Epic (purple) · Legendary (orange)

CompanionTraitHolder MonoBehaviour

Add to the companion prefab to enable trait assignment.

Property / MethodDescription
TraitCountNumber of currently active traits
CanAddTraitTrue if below MaxTraits limit
AssignTrait(trait)Add trait (validates compatibility and requirements)
RemoveTrait(trait)Remove trait and reverse its effects
HasTrait(trait)Check if a specific trait is active
ClearAllTraits()Remove all traits
AssignRandomFromPool(pool)Pick a weighted random trait from a TraitPool
OnTraitAssigned / OnTraitRemovedC# events fired on trait change

TraitPool ScriptableObject

A curated list of traits with weighted random selection. Rarity affects weight automatically. Use with the Assign Random Trait instruction to create unique companions on summon. Create via Create → Companion System → Trait Pool.

Target System

A lightweight targeting system that works alongside abilities. The player or game logic selects a target; abilities validate it against their TargetType and range requirements.

TargetManager Singleton

Add to a persistent GameObject alongside CompanionManager (optional — only needed if using the targeting features).

Property / MethodDescription
HasTargetTrue if a target is currently selected
CurrentTargetTypeEnemy / Friendly / Neutral / Self
SetTarget(targetable)Select a specific target
ClearTarget()Deselect current target
TargetNearest(type, maxRange)Auto-select the nearest entity of a given type
CycleTargets(type)Tab-cycle through available targets
IsTargetInRange(from, range)Check distance to current target
OnTargetChangedC# event: fires when target changes (prev, current)

Targetable MonoBehaviour

Add to any GameObject to make it targetable (enemies, allies, companions, objects). Exposes Faction (Player / Enemy / Neutral) and a highlight method called by TargetManager when the entity is selected or deselected.

Bridges (Optional Integrations)

Each bridge is an independent, deletable assembly that connects CPS to one optional GC2 module. Neither is required for the core feature set — see Getting Started → Requirements.

Companion Inventory Bridge MonoBehaviour

Requires the GC2 Inventory module. Folder: Runtime/Bridges/Inventory (assembly CompanionSystem.InventoryBridge, define CPS_INVENTORY_BRIDGE). A thin adapter, not an inventory implementation — you still set up the actual GC2 Bag component on the companion prefab yourself. The bridge caches the Bag reference and provides CPS-aware queries.

Requirements: Companion Brain and a GC2 Bag must be on the same GameObject — the bridge disables itself with a warning if either is missing.

API: Bag (the GC2 Bag reference), HasBag. See GC2 Integration → Inventory Bridge Nodes.

Companion Needs Bridge MonoBehaviour

Requires the GC2 Stats module. Folder: Runtime/Bridges/Stats (assembly CompanionSystem.StatsBridge, define CPS_STATS_BRIDGE). Drives configurable decay of GC2 Stats Attributes (hunger, happiness, energy, etc.) on a companion and fires threshold events.

Requirements: Companion Brain and GC2's Traits component (holds Attributes) must be on the same GameObject.

API: SatisfyNeed(attribute, amount), GetNeedRatio(attribute), IsNeedCritical(attribute). Events: OnNeedCritical, OnNeedSatisfied, OnNeedChanged. See GC2 Integration → Needs Bridge Nodes.

Removing a bridge you don't use: Delete the whole Runtime/Bridges/Inventory or Runtime/Bridges/Stats folder. Each is its own asmdef with no back-references from core CPS code — the rest of the package compiles unaffected.

Autonomous Abilities (Optional)

New in 1.2.0. Off unless you add a component — nothing about existing scenes changes. By default a companion only casts when something tells it to (the Use Ability Instruction, or your own input handling). 1.2.0 adds an opt-in hook so a companion can decide for itself.

Companion Ability Auto Caster MonoBehaviour

Add this next to a Companion Ability Set on a companion prefab. Every Decision Interval it asks its AI whether to cast, and if so casts through the ordinary CompanionAbilitySet.UseAbility path — same resource cost, slot cooldown, and global cooldown as a player-triggered cast.

FieldDefaultDescription
AI AssetnoneThe CompanionAbilityAIAsset to ask. Leave empty to use a sibling ICompanionAbilityAI component. With neither, the component does nothing.
Decision Interval0.5sSeconds between decisions
Only While In CombatonGate on CompanionVitals.IsInCombat
Require TargetonOnly decide while the Target Manager has a current target
Pause While CommandedonNever cast while executing a CompanionCommand

SetAI(ICompanionAbilityAI) swaps the AI at runtime; pass null to make the component inert again.

First Ready Ability AI ScriptableObject

Create via Create → Companion System → Ability AI → First Ready. The one built-in AI, deliberately simple — a starting point and a worked example, not a combat rotation. Tests every slot with the existing CanUseAbility check and, among those that pass, picks the ability with the shortest configured cooldown.

Fields: Only If Target Is Hostile (on) and Allow Without Target (off, for self-buffs or heals).

ICompanionAbilityAI interface

bool TryChooseAbility(
    CompanionBrain      brain,
    CompanionAbilitySet abilities,
    ITargetable         currentTarget,
    out int             slotIndex,
    out ITargetable     target);

Return true with a slot index to cast. Two helpers in CompanionAbilityAIUtility are available to custom implementations: SelectLowestCooldownSlot(...) and AdvanceDecisionTimer(...).

Party Frame Manager

Component → Companion System → UI → Party Frame Manager drives the party HUD: it pools Companion Frame UI instances, binds one per active companion, re-binds when companions are summoned or recalled, and lays the frames out vertically or horizontally.

FieldDefaultDescription
Frame Prefab—The Companion Frame UI prefab to pool. If empty, bare frames are created at runtime.
Max Frames4Size of the frame pool
Set Target On SelectonExposed in 1.2.0. Selecting a companion also makes it the Target Manager's current target.
Search Children For TargetableoffNew in 1.2.0. Also look for the ITargetable on the companion's children.
Click a party frame to target that companion — this has been in the package since 1.1.0 and was simply undocumented. What 1.2.0 adds is the ability to switch it off (Set Target On Select) and the child-search option for prefabs whose Targetable sits on a child rig rather than the root.

Two pure helpers are public so custom UI can reuse the same rules: PartyFrameManager.ResolveTargetable(companion, searchChildren) and PartyFrameManager.ShouldSetTarget(setTargetOnSelect, targetable, targetManagerExists). Requires a Targetable component (or any ITargetable) on the companion and a Target Manager in the scene — with neither, frame clicks still select and highlight normally.

Companion Banter Trigger

New in 1.2.0. Optional — add it to switch banter on. Without this component in the scene, no banter event is ever raised and nothing changes.

Decides when two active companions should exchange a line and who the two are. It does not decide what is said: that is the job of whatever listens to the GC2 Event On Companion Banter — a Dialogue, a bark, a subtitle, an animation. Put it on the Companion Manager's GameObject, or any scene object you like.

FieldDefaultDescription
Ambient BanteronRaise a line on a random timer
Min / Max Interval25s / 60sRange the ambient wait is drawn from
Banter On Bond Tier UponAlso raise a line when an active companion's bond tier increases
Min Active Companions2Values below 2 are treated as 2
Global Cooldown10sMinimum seconds between any two lines, whatever raised them
Avoid Repeat SpeakeronThe companion that opened the last line is skipped as a speaker, unless it is the only candidate left
CompanionBanterTrigger.OnBanter += args =>
{
    Debug.Log($"{args.Speaker.CustomName} -> {args.Listener.CustomName} ({args.Cause})");
};

OnBanter is static, so a listener needs no reference to the component. CompanionBanterEventArgs carries Speaker, Listener, Cause (CompanionBanterCause: Timer / BondTierUp / Manual) and the two GameObject shortcuts.

TryRaiseBanter() raises a line on demand (cause Manual) and returns whether the rules allowed it. The rules themselves live in the public CompanionBanterUtility. See GC2 Integration → Banter Nodes.

Personality & Reactions

Two optional ScriptableObjects that bring companions to life. Assign both in the CompanionDefinition.

CompanionPersonality ScriptableObject

Controls bonding speed, reaction frequency, and idle behavior intensity. Create via Create → Companion System → Personality.

PropertyDescription
BondGrowthRateMultiplier on all bond gains (0.5 = slow, 2 = fast)
PassiveBondPerMinuteBond gained per minute while near owner
BondPerCommandBond gained when completing a command
BondPerPOIBond gained when visiting an interest point
Tier thresholdsBond levels at which Familiar / Loyal / Bonded unlock
ReactionCooldownMinimum seconds between reactions
BaseReactionChanceProbability of reacting (scales with bond level)

ReactionProfile ScriptableObject

Defines what audio clips, gestures, and VFX to play for each reaction trigger. Create via Create → Companion System → Reaction Profile.

Each ReactionEntry maps a trigger type to a random audio clip array, volume, optional gesture, and VFX prefab. Reactions can be gated to specific bond tiers.

OnSummonedOnRecalledOnCommandReceivedOnCommandCompletedOnIdleEnterOnArrivedBesideOwnerOnOwnerSprintOnStuckOnStuckRecoveredOnInterestPointReachedOnBondTierUpOnCompanionJoinedOnCompanionLeftOnGroupAlert
System Triggers: Summoned, Recalled, Stuck, Command, and BondTierUp reactions always fire regardless of bond level — they're functional feedback. Ambient reactions (IdleEnter, ArrivedBeside, OwnerSprint) scale with bond level and personality frequency.

Interest Points

Place CompanionInterestPoint in your scene to create locations that idle companions will navigate to and interact with (campfires, fountains, food bowls, etc.).

CompanionInterestPoint MonoBehaviour

PropertyDescription
InteractionRadiusHow close the companion needs to be to interact
InteractionDurationSeconds spent at the point
CooldownMinimum time before the same companion revisits
MaxSimultaneousMax companions at this point at once
PointTypeTag for IdleBehaviorProfile filtering

Companions also passively "glance" at nearby interest points they haven't visited yet. Bond points are awarded upon a successful POI visit (configured in CompanionPersonality).

IdleBehaviorProfile

ScriptableObject configuring what companions do when idle. Assign to a CompanionDefinition or set a default in CompanionSettings.

PropertyDescription
InitialDelaySeconds before idle actions begin after entering Idle state
MinInterval / MaxIntervalRandom interval between idle actions
ActionPoolList of IdleActions to randomly pick from (weighted)
EnableInterestPointsAllow visiting nearby CompanionInterestPoints
InterestPointRadiusSearch radius for interest points
NavigationTimeoutMax seconds to reach a POI before aborting

CompanionSettings

Project-wide defaults. Access via Window → Companion System → Settings. The Settings window auto-creates the asset if not found.

SectionSettings
GeneralMax Active Companions, Debug Logging
Follow DefaultsDefault Follow Profile, Default Formation (Line/VShape/Circle)
NavigationObstacle Avoidance (Auto / Prefer NavMesh / Raycast Only) — see Navigation & Following
Stuck RecoveryTeleport Fade Duration
TraitsMax Traits per companion