# Object detection & transforms

Runtime consumption of detected markers, 6-DoF objects, and XR-headset transforms. For the task-focused guide see [Object-detection consumer](/docs/unity-sdk/object-detection).

## ObjectDetectionConsumer

Moved to [`ObjectDetectionConsumer`](/docs/sdk-api/unity-api/classes/objectdetectionconsumer).

### InstanceType

<Badge tone="type">enum</Badge>

`{ Marker, Object }` — a simple 3-DoF `Marker` vs a full 6-DoF `Object`.

## TrackedInstance

<Badge tone="type">class</Badge> <Badge>Unity component</Badge>

Attached to each spawned marker/object; the per-object data model.

| Member | Type | Meaning |
|---|---|---|
| `Id` | `string` | server marker/object id |
| `Type` | [`InstanceType`](#instancetype) | `Marker` or `Object` |
| `ColorName` | `string` | server type/color label |
| `Color` | `Color` | resolved Unity color |
| `Position` | `Vector3` | current world position (meters) |
| `Radius` | `float` | marker radius ⚠️ (units appear to be meters / a scale × `MarkerSize`) |
| `CaptureTime` | `double` | server capture timestamp (seconds) |
| `IsSkeletonMarker` | `bool` | true for skeleton-joint markers |
| `Renderer` | `Renderer` | for visibility/material control |

<ApiMember name="SetPosition" kind="method">

```csharp
public Vector3 SetPosition(Vector3 position, float SmoothPositionalThreshold = 0, float SmoothPositionalFactor = 0);
```

<Params>
<Param name="position" type="Vector3">target world position (meters)</Param>
<Param name="SmoothPositionalThreshold" type="float" optional>smoothing threshold</Param>
<Param name="SmoothPositionalFactor" type="float" optional>smoothing factor</Param>
</Params>

<Returns type="Vector3">the applied position</Returns>

</ApiMember>

<ApiMember name="ApplyFilter" kind="method">

```csharp
public void ApplyFilter(double processNoise, double measurementNoise, bool useDiscreteWhiteNoise,
                        bool useAcceleration, double futureDeltaTime);
```

Configures the per-instance Kalman filter.

</ApiMember>

:::caution
⚠️ `SetPosition` assigns `localPosition`; the smoothing branch compares against the just-set value, so the threshold/factor smoothing may be a no-op as written.
:::

### MarkerItem

<Badge tone="type">serializable class</Badge>

Maps a marker type to a prefab to spawn in its place: `MarkerType` (string), `Prefab` (`GameObject`), `Enabled` (`bool`, default true).

### TrackedMarkerExtensions

<Badge tone="type">static class</Badge>

Interpret marker IDs:

<ApiMember name="Marker-ID helpers" kind="method" tags="static" id="trackedmarkerextensions-helpers">

```csharp
public static bool IsSkeletonMarker(this TrackedMarker marker);   // Id contains "Skeleton"
public static bool TrySkeletonMarkerInfo(this TrackedMarker marker, out string skeletonId, out string jointName);
```

⚠️ exact `skeletonId` / `jointName` formats depend on the server's marker-ID scheme.

</ApiMember>

## ObjectTransformConsumer

Moved to [`ObjectTransformConsumer`](/docs/sdk-api/unity-api/classes/objecttransformconsumer).

### ObjectInfo

Moved to [`ObjectInfo`](/docs/sdk-api/unity-api/classes/objecttransformconsumer#objectinfo).

## ObjectTransform

Moved to [`ObjectTransform`](/docs/sdk-api/unity-api/classes/objecttransform).

## XRHeadsetTracker

Moved to [`XRHeadsetTracker`](/docs/sdk-api/unity-api/classes/xrheadsettracker).

---

Next: [Hands, controllers & boundary](/docs/sdk-api/unity-api/hands-controllers-boundary).
