Telemetry Integration & Troubleshooting
Once you’ve created a telemetry provider — whether through a ScriptableObject or runtime code — the final step is confirming that it’s connected and working correctly.
This page covers setup order, runtime verification, and common issues when using telemetry with the Special Encounter Manager.
1. Setup Flow Overview
To ensure telemetry is evaluated correctly, the following flow must occur during initialization:
flowchart TD
A[RuntimeSpawner.Init()] --> B[SpecialEncounterManager.Init()]
B --> C[TelemetryProvider assigned]
C --> D[RuntimeSpawner.StartSpawners()]
D --> E[SpecialEncounterManager.Begin()]Quick Checklist
1. RuntimeSpawner in scene
Must be initialized first (Init() → StartSpawners()).
2. SpecialEncounterManager present
Assigned a valid Special Profile with rules.
3. Telemetry Provider assigned
Via inspector (SO) or SetTelemetryProvider(...).
4. Begin() called
The manager’s internal timer starts rule evaluation.
2. Verifying Telemetry at Runtime
Option A — Diagnostics HUD
If your HUD includes the Specials section:
“Pressure:” and “Avg HP:” values update live as the manager polls the provider.
“Next:” shows when the next rule evaluation will occur.
“Last Spawn:” confirms when a special was successfully triggered.
Example HUD output:
Specials: Pressure=0.84 AvgHP=0.67 Next: 4.2s
Last Spawn: 12s ago (Tag: Boss)If these values stay at 0.00, telemetry is not connected or not returning data.
Option B — Console Logs
Enable Debug Logs in your Telemetry Settings or manager inspector to print evaluations:
[Specials] Evaluating rule "Flanker"
[Specials] Pressure=0.84, AvgHP=0.67 → PASS
[Specials] Spawned Flanker_Special (anchor=Hint_03)3. Timing & Evaluation Behavior
Telemetry is checked each evaluation cycle, defined by the
evalEverySecondsvalue on each Special Rule.If rules share the same interval, they evaluate in sequence.
Rules can also be step-gated — if the Director step doesn’t match, the telemetry condition isn’t checked.
Tip: When testing, shorten
evalEverySeconds(e.g. 1–3s) and lower cooldowns to quickly validate rule behavior.
4. Common Issues & Fixes
No special encounters spawning
Telemetry provider not assigned or returning false.
Assign a provider in inspector or inject one via code.
HUD shows Pressure=0.00 / AvgHP=0.00
Your provider returns default values.
Verify that TryGetPressure and TryGetAveragePlayerHP return true and set value.
“Specials: (unscheduled)”
All rules are ineligible (wrong step, cooldown, or telemetry missing).
Advance the Director step or reduce gating thresholds.
Specials spawn too often
Thresholds too low or cooldowns too short.
Increase minPressure, cooldownSeconds, or rule caps.
Rules never pass even with high telemetry values
Provider not returning normalized (0–1) data.
Normalize your pressure and HP values.
Force Roll Now does nothing
Editor-only command not wired or manager not active.
Ensure you’ve called Begin() or re-enable the editor utility.
5. Force Evaluation (Editor Utility)
In Play Mode, you can trigger an immediate check of all special rules:
Context Menu → Force Specials Roll Now
This command bypasses normal cooldowns and eval timers.
Use it to quickly test rule eligibility, thresholds, and anchor selection.
Available only in Editor builds (
#if UNITY_EDITOR).
6. Best Practices
Stable values
Update telemetry in your game loop before the manager’s next evaluation.
Consistent scale
Keep both Pressure and AvgHP between 0–1.
Debug clarity
Enable the HUD and logs while tuning; disable for release.
Fallback behavior
Remember: no telemetry = rule fail (safe default).
Iterate safely
Use the BasicSample provider to verify setup before wiring real data.
7. Example Validation Flow
Start with
BasicSpecialsTelemetryasset assigned.Confirm rule thresholds (e.g., Min Pressure ≥ 0.8, Min Avg HP ≥ 0.5).
Enter Play Mode and adjust sliders:
At
pressure=0.9, rule should pass.Drop to
pressure=0.5, rule should fail.
Replace with real provider (
GameLinkedTelemetryor runtime injected version).Confirm HUD values track gameplay data.
Test rule timing and cooldowns under real load.
✅ Summary
Telemetry integration is lightweight and fault-tolerant:
The Special Encounter Manager polls telemetry every evaluation cycle.
You can supply data through ScriptableObject or runtime interface providers.
Missing telemetry never breaks the system — it simply prevents those rules from spawning.
Use the Diagnostics HUD and Force Roll Now tool for fast iteration.
In short: If your specials aren’t spawning, start with telemetry — confirm values, scale them correctly, and watch them drive your encounter pacing.
Last updated