# prepareCompleted

> The VideoPlayer invokes this event when the video is ready for playback.

## Definition

* **Type:** Event
* **Namespace:** [UnityEngine.Video](/engine/6000.0/script-reference/unityengine/video.md)
* **Assembly:** UnityEngine.VideoModule

```csharp
public event VideoPlayer.EventHandler prepareCompleted
```

### Remarks

The [VideoPlayer](/engine/6000.0/script-reference/unityengine/video/videoplayer.md) uses [VideoPlayer.Prepare](/engine/6000.0/script-reference/unityengine/video/videoplayer/prepare.md) to ready a video for playback. When the preparation finishes, the [VideoPlayer](/engine/6000.0/script-reference/unityengine/video/videoplayer.md) invokes this callback. If you start playback after this callback is invoked, frames become available instantly. If you call [VideoPlayer.Play](/engine/6000.0/script-reference/unityengine/video/videoplayer/play.md) without using [VideoPlayer.Prepare](/engine/6000.0/script-reference/unityengine/video/videoplayer/prepare.md) first, the [VideoPlayer](/engine/6000.0/script-reference/unityengine/video/videoplayer.md) invokes `Prepare()` anyway. If preparation succeeds, the [VideoPlayer](/engine/6000.0/script-reference/unityengine/video/videoplayer.md) still invokes this event.

Additional Resources: [VideoPlayer.Prepare](/engine/6000.0/script-reference/unityengine/video/videoplayer/prepare.md), [VideoPlayer.EventHandler](/engine/6000.0/script-reference/unityengine/video/videoplayer/eventhandler.md).

### Examples

```csharp
// In this script, you can only interact with the button to play the video after the VideoPlayer 
// finishes its preparation of the video. To start the preparation process, press Spacebar in Play mode. 

// Attach this script to the GameObject you want to play a video clip on. 
// Attach a VideoPlayer component with a video clip and assign a Button in the Inspector.

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;

public class PrepareExample: MonoBehaviour
{
    VideoPlayer videoPlayer;
    public Button playButton;

    private void Awake()
    {
        // Get the VideoPlayer component from GameObject with this script attached.  
        videoPlayer = GetComponent<VideoPlayer>();
        // Attach the event handler, which triggers when the VideoPlayer finishes its preparation. 
        videoPlayer.prepareCompleted += OnPrepareCompleted;
        videoPlayer.playOnAwake = false;
        playButton.interactable = false;
    }

    // Event handler for when VideoPlayer finishes the preparation process. 
    void OnPrepareCompleted(VideoPlayer vp)
    {
        Debug.Log("Preparation complete. You can now play the video.");

        // Preparation is complete so allow interactions with the play button. 
        playButton.interactable = true;
        playButton.onClick.AddListener(OnPlayButtonClicked);
    }

    void OnPlayButtonClicked()
    {
        // If the play button is clicked and the preparation is done, play the video. 
        if (videoPlayer.isPrepared)
        {
            videoPlayer.Play();
        }
    }

    private void Update()
    {
        // Press Spacebar to prepare the video. 
        if (Input.GetKeyDown("space"))
        {
            if (!videoPlayer.isPrepared)
            {
                videoPlayer.Prepare(); 
            }
        }
    }
}
```
