【Unity】Gif動画を簡単にメッシュやスプライトに貼って再生できるアセットAnimated GIF Player

#はじめに
「[Animated GIF Player](https://www.assetstore.unity3d.com/#!/content/80956?aid=1100l3oC8)」とは
<img width="999" alt="Animated_GIF_Player_-_Asset_Store.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/29b91bd2-421d-fcab-2b53-a34052889315.png">
>アニメーションGIFプレーヤでは、デスクトップとモバイルでアニメーションGIFを再生できます。

>デモムービー - 短いチュートリアル

>アニメーションGif Playerコンポーネントをgameオブジェクトに追加し、GIFファイルを選択して、再生を押してください。

>主な特徴
スクリプトを必要とせずに使いやすい
-GIFはパフォーマンスを向上させるために別のスレッドでデコードすることができます
- 純粋なC＃のソリューション、余分なプラグインのインストールや編集が不要
コメント付きのソースコードが含まれています
- MovieTextureの代わりとしての短いビデオクリップには便利です
デバイスとウェブの両方からGIFを読み込む

#動作環境
Mac 10.13.6
Unity 2018.2.5f1
Animated GIF Player 1.13.4

#使い方
アセットをインポートしてきたら、
gifを貼りたいオブジェクトをシーン上の配置してください
それでAddComponentで「AnimatedGifPlayer」を追加してください
追加で一つ注意としては必ず「RawImage」「MeshRenderer」「SpriteRenderer」コンポネーントのどれか一つ入っているオブジェクトに追加してください
シェーダーは特に差し替えなくても大丈夫です

MeshRendererの場合
<img width="318" alt="Unity_2018_2_5f1_Personal__64bit__-_SampleScene_unity_-_New_Unity_Project__2__-_PC__Mac___Linux_Standalone__Personal___Metal_.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/eaa91c8b-3dd8-dc5f-470a-4d41892faf00.png">

次にAnimatedGifPlayerのSelectGIFを押して、Gifを選択します。
Gifの格納場所は必ず「StreamingAssets」フォルダに格納して参照しましょう

あとは再生して上げれば再生されるはずです
ちなみアルファにも対応されています

![Sep-08-2018 18-36-00.gif](https://qiita-image-store.s3.amazonaws.com/0/158441/102f08b8-e414-7af7-acdc-5912263becaa.gif)

#AnimatedGifPlayerパラメーター
<img width="319" alt="Unity_2018_2_5f1_Personal__64bit__-_SampleScene_unity_-_New_Unity_Project__2__-_PC__Mac___Linux_Standalone__Personal___Metal_.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/6bfb6370-d545-be0f-9b07-1128b80064d8.png">

| 項目 | 内容 |
|:-----------|:-----------|
| Loop| これをtrueに設定すると、GIFループが作成されます（デフォルト：true）
| AutoPlay  |  初期化時にGIFの再生を開始するには、これをtrueに設定します。| 
| FileName |  StreamingAssetsフォルダ内のGIFのファイル名　SelectGifで直接参照できます|
| ThreadedDecoder  |  有効にすると、プレーヤーは別のスレッドで各GIFフレームをデコードしますパフォーマンスを向上させます。 （デフォルト：有効）|
| CacheFrames  |  有効にすると、デコード後に各フレームがメモリにキャッシュされます。 デコードはやや遅くなります。 これは、GIFをループするときに使用し、デコーダの実行を維持したくない場合に使用します。（デフォルト：無効）|
| BufferAllFrames  | 有効にすると、すべてのフレームがロードされ、キャッシュされます GIFプレーヤーが初期化されます。 起動は少し遅くなります。なぜなら、再生はすべてのフレームデコードされる。 無効にすると、必要に応じて各フレームがデコードされます。 （デフォルト：無効）|
| OverrideTimeScale  |  Gifの再生速度をTime.timeScaleから独立して設定します|
| PlaybackSpeed  |  再生速度

#スクリプト制御
アセットに入っているサンプルコードCodeExample.csを解説
初期化で再生したいGifをAnimatedGifPlayerにセットして、Play,Pauseができる簡単なサンプル

```c#:CodeExample.cs
using UnityEngine;
using UnityEngine.UI;
using OldMoatGames;

public class CodeExample : MonoBehaviour {
　　　　　　　　//gifプレイヤー
    private AnimatedGifPlayer AnimatedGifPlayer;
    //再生ボタン
    public Button PlayButton;
　　　　　　　//停止ボタン
    public Button PauseButton;

    public void Awake() {
        // AnimatedGifPlayer取得
        AnimatedGifPlayer = GetComponent<AnimatedGifPlayer>();

        // StreamingAssetsフォルダのファイル名指定
        AnimatedGifPlayer.FileName = "AnimatedGIFPlayerExampe 3.gif";

        // 自動再生を無効にする
        AnimatedGifPlayer.AutoPlay = false;

        // GIFが再生準備ができているときに再生を開始する準備完了イベントを追加する
        AnimatedGifPlayer.OnReady += OnGifLoaded;
        
        // ロードに失敗した場合の準備完了イベントを追加する
        AnimatedGifPlayer.OnLoadError += OnGifLoadError;

        // GIFプレーヤーを初期化する
        AnimatedGifPlayer.Init();
    
    }

    private void OnGifLoaded() {
        PlayButton.interactable = true;

        Debug.Log("GIF size: width: " + AnimatedGifPlayer.Width + "px, height: " + AnimatedGifPlayer.Height + " px");
    }

    private void OnGifLoadError() {
        Debug.Log("Error Loading GIF");
    }

    //再生
    public void Play() {
        // GIFの再生を開始する
        AnimatedGifPlayer.Play();

        // 再生ボタンを無効にする
        PlayButton.interactable = false;

        // 一時停止ボタンを有効にする
        PauseButton.interactable = true;
    }
　　　　　　　
　　　　　　　　//停止
    public void Pause() {
        // GIFの再生を停止する
        AnimatedGifPlayer.Pause();

        //　再生ボタンを有効にする
        PlayButton.interactable = true;

        // 一時停止ボタンを無効にする
        PauseButton.interactable = false;
    }

    public void OnDisable() {
        AnimatedGifPlayer.OnReady -= Play;
    }
}
```