# IAnimationWindowPreview

> Allows a class to modify how an AnimationClip is sampled in the Animation window by providing its own Playable nodes to the Animation window PlayableGraph. The class must also inherit from MonoBehaviour.

## Definition

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

```csharp
public interface IAnimationWindowPreview
```

## Remarks

Additional Resources: [AnimationScriptPlayable](/engine/6000.7/script-reference/unityengine/animations/animationscriptplayable.md)

## Examples

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

[RequireComponent(typeof(Animator))]
public class ExampleScript : MonoBehaviour, IAnimationWindowPreview
{
    public Vector3 offset = Vector3.zero;

    private AnimationScriptPlayable m_Playable;
    private AnimationJob m_Job;
    private Vector3 m_CurrentOffset;

    struct AnimationJob : IAnimationJob
    {
        public TransformStreamHandle transform;
        public Vector3 offset;

        public void ProcessRootMotion(AnimationStream stream)
        {
            Vector3 position = transform.GetLocalPosition(stream);
            position += offset;

            transform.SetLocalPosition(stream, position);
        }

        public void ProcessAnimation(AnimationStream stream)
        {
        }
    }

    public void StartPreview()
    {
        m_CurrentOffset = offset;
    }

    public void StopPreview()
    {
    }

    public void UpdatePreviewGraph(PlayableGraph graph)
    {
        if (m_CurrentOffset != offset)
        {
            m_Job.offset = offset;
            m_Playable.SetJobData(m_Job);

            m_CurrentOffset = offset;
        }
    }

    public Playable BuildPreviewGraph(PlayableGraph graph, Playable input)
    {
        Animator animator = GetComponent<Animator>();

        m_Job = new AnimationJob();
        m_Job.transform = animator.BindStreamTransform(transform);
        m_Job.offset = offset;

        m_Playable = AnimationScriptPlayable.Create(graph, m_Job, 1);

        graph.Connect(input, 0, m_Playable, 0);

        return m_Playable;
    }
}
```

## Methods

| Method                                                                                                                     | Description                                                                                                                                                                                                                                           |
| -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [BuildPreviewGraph](/engine/6000.7/script-reference/unityengine/animations/ianimationwindowpreview/buildpreviewgraph.md)   | Appends custom [Playable](/engine/6000.7/script-reference/unityengine/playables/playable.md) nodes to the Animation window [PlayableGraph](/engine/6000.7/script-reference/unityengine/playables/playablegraph.md).                                   |
| [StartPreview](/engine/6000.7/script-reference/unityengine/animations/ianimationwindowpreview/startpreview.md)             | Notification callback when the Animation window starts previewing an [AnimationClip](/engine/6000.7/script-reference/unityengine/animationclip.md).                                                                                                   |
| [StopPreview](/engine/6000.7/script-reference/unityengine/animations/ianimationwindowpreview/stoppreview.md)               | Notification callback when the Animation window stops previewing an [AnimationClip](/engine/6000.7/script-reference/unityengine/animationclip.md).                                                                                                    |
| [UpdatePreviewGraph](/engine/6000.7/script-reference/unityengine/animations/ianimationwindowpreview/updatepreviewgraph.md) | Notification callback when the Animation Window updates its [PlayableGraph](/engine/6000.7/script-reference/unityengine/playables/playablegraph.md) before sampling an [AnimationClip](/engine/6000.7/script-reference/unityengine/animationclip.md). |
