# TransformSceneHandle

> Handle to read position, rotation and scale of an object in the Scene.

## Definition

* **Type:** Struct
* **Namespace:** [UnityEngine.Animations](/engine/6000.7/script-reference/unityengine/animations.md)
* **Assembly:** UnityEngine.AnimationModule

```csharp
public struct TransformSceneHandle
```

## Remarks

TransformSceneHandle are read-only.

A TransformSceneHandle is a safe handle on a [TransformAccess](/engine/6000.7/script-reference/unityengine/jobs/transformaccess.md). The [Animator](/engine/6000.7/script-reference/unityengine/animator.md) used to create this handle manages the validity of this handle.

Additional Resources: [AnimatorJobExtensions.BindSceneTransform](/engine/6000.7/script-reference/unityengine/animations/animatorjobextensions/bindscenetransform.md), [PropertySceneHandle](/engine/6000.7/script-reference/unityengine/animations/propertyscenehandle.md), [PropertyStreamHandle](/engine/6000.7/script-reference/unityengine/animations/propertystreamhandle.md), [TransformStreamHandle](/engine/6000.7/script-reference/unityengine/animations/transformstreamhandle.md)

## Examples

```csharp
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Animations;

public struct TransformSceneHandleJob : IAnimationJob
{
    public TransformSceneHandle handle;

    public void ProcessRootMotion(AnimationStream stream)
    {
        // Log the local position.
        var position = handle.GetLocalPosition(stream);
        Debug.LogFormat("Position: {0}", position);

        // Log the local rotation (converted from euler).
        var rotation = handle.GetLocalRotation(stream);
        Debug.LogFormat("Rotation: {0}", rotation.eulerAngles);

        // Log the local scale.
        var scale = handle.GetLocalScale(stream);
        Debug.LogFormat("Scale: {0}", scale);
    }

    public void ProcessAnimation(AnimationStream stream)
    {
    }
}

[RequireComponent(typeof(Animator))]
public class TransformSceneHandleExample : MonoBehaviour
{
    public Transform sceneTransform;

    PlayableGraph m_Graph;
    AnimationScriptPlayable m_AnimationScriptPlayable;

    void Start()
    {
        if (sceneTransform == null)
            return;

        var animator = GetComponent<Animator>();

        m_Graph = PlayableGraph.Create("TransformSceneHandleExample");
        var output = AnimationPlayableOutput.Create(m_Graph, "output", animator);

        var animationJob = new TransformSceneHandleJob();
        animationJob.handle = animator.BindSceneTransform(sceneTransform);
        m_AnimationScriptPlayable = AnimationScriptPlayable.Create(m_Graph, animationJob);

        output.SetSourcePlayable(m_AnimationScriptPlayable);
        m_Graph.Play();
    }

    void OnDisable()
    {
        if (sceneTransform == null)
            return;

        m_Graph.Destroy();
    }
}
```

## Methods

| Method                                                                                                                          | Description                                                                    |
| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| [GetGlobalTR](/engine/6000.7/script-reference/unityengine/animations/transformscenehandle/getglobaltr.md)                       | Gets the position and scaled rotation of the transform in world space.         |
| [GetLocalPosition](/engine/6000.7/script-reference/unityengine/animations/transformscenehandle/getlocalposition.md)             | Gets the position of the transform relative to the parent.                     |
| [GetLocalRotation](/engine/6000.7/script-reference/unityengine/animations/transformscenehandle/getlocalrotation.md)             | Gets the rotation of the transform relative to the parent.                     |
| [GetLocalScale](/engine/6000.7/script-reference/unityengine/animations/transformscenehandle/getlocalscale.md)                   | Gets the scale of the transform relative to the parent.                        |
| [GetLocalToParentMatrix](/engine/6000.7/script-reference/unityengine/animations/transformscenehandle/getlocaltoparentmatrix.md) | Gets the local to parent matrix of the transform.                              |
| [GetLocalToWorldMatrix](/engine/6000.7/script-reference/unityengine/animations/transformscenehandle/getlocaltoworldmatrix.md)   | Gets the local to world matrix of the transform.                               |
| [GetLocalTRS](/engine/6000.7/script-reference/unityengine/animations/transformscenehandle/getlocaltrs.md)                       | Gets the position, rotation and scale of the transform relative to the parent. |
| [GetPosition](/engine/6000.7/script-reference/unityengine/animations/transformscenehandle/getposition.md)                       | Gets the position of the transform in world space.                             |
| [GetRotation](/engine/6000.7/script-reference/unityengine/animations/transformscenehandle/getrotation.md)                       | Gets the rotation of the transform in world space.                             |
| [IsValid](/engine/6000.7/script-reference/unityengine/animations/transformscenehandle/isvalid.md)                               | Returns whether this is a valid handle.                                        |
