---
title: Introduction to TransformHandle API
product: Unity Editor
version: '6000.3'
latest_version: '7000.0'
status: This page documents version 6000.3. The latest version is 7000.0.
canonical: https://docs.unity.com/en-us/engine/6000.3/manual/class-transform-handle
latest_url: https://docs.unity.com/en-us/engine/7000.0/manual/class-transform-handle.md
last_updated: 2026-11-08
generated_at: 2026-11-09T18:27:31.426Z
locale: en-us
---

# Introduction to TransformHandle API

> Introduction to the TransformHandle API and the key differences from the Transform API.

The [`TransformHandle`](/engine/6000.3/script-reference/unityengine/transformhandle.md) API is an alternative to the [`Transform`](/engine/6000.3/script-reference/unityengine/transform.md) API. Unlike the `Transform` component (a managed class), `TransformHandle` is an unmanaged `struct`, which makes it fully compatible with the [Burst](http://docs.unity3d.com/Packages/com.unity.burst@latest) compiler.

While the `TransformHandle` API covers the same core operations as the `Transform` API, its design introduces several key differences described on this page.

## Differences with Transform API

The `TransformHandle` API functionality is equivalent to the `Transform` API, the key differences are in the way you access it, and in the implementation details.

**Transform API (Unity 6.2 and earlier):**

* You access the transform using the `GameObject.transform` property.
* The `transform` property returns a `Transform` component reference (managed type).
* The API is managed and not compatible with the Burst compiler.
* The API works alongside `TransformHandle` API in Unity 6.

**TransformHandle API (Unity 6.3 and later):**

| **Transform API**                                                                                                          | **TransformHandle API** (added in Unity 6.3)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| -------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| You access the transform using the `GameObject.transform` property.                                                        | You access the transform using `gameObject.transformHandle` or `transform.GetTransformHandle` (where `transform` is the `Transform` component).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Returns a `Transform` component reference (managed type).                                                                  | Returns a `TransformHandle` struct (unmanaged type).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| The API is managed and not compatible with the [Burst](https://docs.unity3d.com/Packages/com.unity.burst@latest) compiler. | Is compatible with the [Burst](https://docs.unity3d.com/Packages/com.unity.burst@latest) compiler in Burst-compiled code that runs on the main thread. The `TransformHandle` struct isn't thread-safe and throws a safety exception if you access it from a job that implements an interface such as `IJobParallelForTransform`. To read or write transform values from jobs, use the [`TransformAccessArray`](/engine/6000.3/script-reference/unityengine/jobs/transformaccessarray.md) struct, which you can construct from a `NativeArray<TransformHandle>` collection. For more information, refer to [Using TransformHandle with Burst](/engine/6000.3/manual/transformhandle-burst.md). |
| Editor and runtime API.                                                                                                    | Runtime-only API.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |

### Transform APIs that are not available in the TransformHandle API

The following methods and properties from `Transform` APIs are not available in `TransformHandle` API:

* `GetSiblingIndex` / `SetSiblingIndex`
* `Find`
* `hasChanged` property

### TransformHandle API without an equivalent in the Transform API

The following `TransformHandle` API elements don't have an equivalent in the `Transform` API.

* [`TransformHandle.DirectChildrenEnumerable`](/engine/6000.3/script-reference/unityengine/transformhandle/directchildrenenumerable.md) represents an enumerable of the direct children of a transformHandle, and this enumerable returns a DirectChildrenEnumerator when enumerated.

* [`TransformHandle.DirectChildrenEnumerator`](/engine/6000.3/script-reference/unityengine/transformhandle/directchildrenenumerator.md) is an enumerator that goes through the direct children of a transform.

* [`TransformHandle.DirectChildren`](/engine/6000.3/script-reference/unityengine/transformhandle/directchildren.md) returns a DirectChildrenEnumerable of this transform, which you can use to iterate over direct children with a foreach loop.

* [`TransformHandle.GetDirectChildrenEnumerator`](/engine/6000.3/script-reference/unityengine/transformhandle/getdirectchildrenenumerator.md) returns a DirectChildrenEnumerator of this transform, which you can use to manually iterate over direct children.

### Differences in common operations

The following common operations have a different implementation in `TransformHandle` API.

Check if a transform is valid:

* **Transform**: `transform != null`
* **TransformHandle**: `TransformHandle.IsValid`

Iterate the direct children of the transform:

* **Transform**: `foreach (Transform t in transform)`
* **TransformHandle**: `foreach (TransformHandle t in handle.DirectChildren)`

Set a parent of a transform to `None`:

* **Transform**: `transform.SetParent(null)`

* **TransformHandle**:

  ```lang-cs
  transformHandle.SetParent(TransformHandle.None)
  ```

  or

  ```lang-cs
  TransformHandle h = transformHandle;
  h.parent = TransformHandle.None;
  ```

For specific examples on how to use the API, refer to [TransfromHandle API examples](/engine/6000.3/manual/working-with-gameobjects/transformhandle-examples.md).

### Methods with different argument or return types

The following methods are functionally equivalent, but have different argument types or return types (`Transform`, or `TransformHandle` depending on the API they are called from).

Different argument types:

* `IsChildOf`
* `LookAt`
* `SetParent`
* `Translate` (overload)

Different return types:

* `GetChild`
* `parent`
* `root`

## Additional resources

* [TransformHandle API examples](/engine/6000.3/manual/working-with-gameobjects/transformhandle-examples.md)
* [Using TransformHandle with Burst](/engine/6000.3/manual/transformhandle-burst.md)
