// Recipe

Simulation training: attention, procedure adherence, and where the trainee got lost.

Training simulations have the opposite cost function from games: the goal is not engagement, it is correctness and retention. Analytics has to follow that. You care about where the trainee looked, where they hesitated, whether they followed the prescribed path, and whether they triggered any hazards. This recipe wires the events that surface those signals across procedural training (factory floor, surgery, hazardous equipment), assessment scenarios, and compliance walkthroughs. It works for VR, AR passthrough, and flat-screen sims; the event shapes do not change.

Event vocabulary

  • sight_check — Frustum. Head position, head rotation, the headset FOV, a reasonable range. Fire on a slow cadence (1-2 seconds) or on demand at known check moments. View cones aggregate into an attention heat layer. Metadata: scenario_step.
  • area_entered / area_exited — Point. Fire on trigger volumes you've defined around procedural stations. Together they bound dwell time per station. Metadata: station_id.
  • step_complete — Point. Fire whenever the trainee finishes a procedural step. The simplest measure of throughput. Metadata: step_id, duration_s, attempts.
  • hazard_contact — Volume. Center on the hazard, radius based on the danger zone. Metadata: severity (critical / major / minor), hazard_id.
  • route_sample — Position stream. Continuous TrackPosition on the trainee transform. Renders as path curves in the Path Flow engine. Pro+ tier only.
  • scenario_outcome — Point. Fire once at scenario end at the trainee's final position. Metadata: passed, score, elapsed_s.

Sample wiring

Sight checks are the highest-value signal for training because they directly indicate whether the trainee processed the visual cue you intended. The pattern below fires a frustum at a slow cadence keyed to the current scenario step, plus a step-complete event when the trainee finishes whatever the step requires.

using UnityEngine;
using Traced;
using System.Collections.Generic;

public class TrainingTelemetry : MonoBehaviour {
  public Transform Head;
  public float Fov = 100f;
  public float Range = 8f;
  public float SightInterval = 1.5f;

  string currentStep;
  float timeInStep;
  float nextSight;

  public void BeginStep(string stepId) {
    currentStep = stepId;
    timeInStep = 0f;
  }

  public void CompleteStep(int attempts) {
    Traced.TrackEvent("step_complete", Head.position, Head.rotation,
      new Dictionary<string, string> {
        { "step_id", currentStep },
        { "duration_s", timeInStep.ToString("F1") },
        { "attempts", attempts.ToString() },
      });
  }

  void Update() {
    timeInStep += Time.deltaTime;
    if (Time.time >= nextSight) {
      nextSight = Time.time + SightInterval;
      Traced.TrackFrustum("sight_check", Head.position, Head.rotation, Fov, Range,
        new Dictionary<string, string> { { "scenario_step", currentStep } });
    }
  }
}

What to look for in the dashboard

Open Spatial Density with the sight_check layer enabled — the frustum aggregate shows you, literally, where trainee attention pooled. Filter by scenario_step to compare expected and actual focus. A step whose density is centered on the wrong instrument is a scenario-design problem you would not catch any other way.

Cross-reference area_entered dwell duration against step_complete count for the same station. Long dwell with few completions is hesitation; short dwell with no completion is the trainee bailing. Both are coaching signals.

Switch to Path Flow for the position stream. Overlay the route a single trainee took against an aggregate of passing trainees — outliers from the intended path are immediately visible. Filter scenario_outcome by passed=false and the path flow becomes a failure-pattern map.

Any density in hazard_contact filtered to severity=critical is an after-action review item. The recent-events table gives you the session ID, the trainee context, and the step they were on. Export from the dashboard for archival; Studio tier supports custom retention windows for compliance programs.

Adjacent reading: the VR arena recipe shares the head-and-hand pattern. For broader patterns across training programs see use cases.