【Unity(C#)】Animatorを使わずにパラパラ漫画作成

##SpriteAnimation
Unityの機能を利用してきれいに作れるみたいです。
参考リンク：[Unity でスプライトアニメーションを作る](https://qiita.com/ELIXIR/items/e58fa48680e0ebbde0ea)

しかし、ここまでガッツリと2Dのアニメーションを作りたいわけではありません。

何より、Animatorの設定を毎回やるのはタフなので
パラパラ漫画のような簡易スプライトアニメーションを作れないかと思いやってみました。

##指定した秒数間隔で画像を切り替える
処理の内容としては
Imageコンポーネントの`Source Image`を指定秒数後に別の`Texture`に入れ替えるだけです。

以下コードです。

```C#
using System.Collections;
using UnityEngine.UI;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
using UnityEditorInternal;
#endif

public class SpriteAnimation : MonoBehaviour
{
    [SerializeField]
    Image spriteImage;

    [SerializeField,HideInInspector]
    Sprite[] spriteTextures;

    [SerializeField]
    float animationFrameSeconds;

    [SerializeField]
    bool debug;

    public bool loop;

    Coroutine runCoroutine;

    void Update()
    {
        //デバッグキー
        if (Input.GetKeyDown(KeyCode.T) && debug)
        {
            SpriteAnimeStart();
        }
    }

    public void SpriteAnimeStart()
    {
        if (runCoroutine == null)
        {
            runCoroutine = StartCoroutine(SpriteAnimeCoroutine());
        }     
    }

    IEnumerator SpriteAnimeCoroutine()
    {
        if(loop)
        {
            while(loop)
            {
                for (int i = 0; i < spriteTextures.Length; i++)
                {
                    spriteImage.sprite = spriteTextures[i];
                    yield return new WaitForSeconds(animationFrameSeconds);
                }
            }

            runCoroutine = null;
            yield break;
        }
        else
        {
            for (int i = 0; i < spriteTextures.Length; i++)
            {
                spriteImage.sprite= spriteTextures[i];
                yield return new WaitForSeconds(animationFrameSeconds);
            }
            runCoroutine = null;
        }
    }


#if UNITY_EDITOR
    [CustomEditor(typeof(SpriteAnimation))]
    public class SpriteAnimationEditor : Editor
    {
        ReorderableList reorderableList;

        void OnEnable()
        {
            SerializedProperty prop = serializedObject.FindProperty("spriteTextures");

            reorderableList = new ReorderableList(serializedObject, prop);

            reorderableList.drawHeaderCallback = (rect) => EditorGUI.LabelField(rect, "アニメーションに使用する画像");
            reorderableList.drawElementCallback = (rect, index, isActive, isFocused) =>
            {
                SerializedProperty element = prop.GetArrayElementAtIndex(index);
                rect.height -= 4;
                rect.y += 2;
                EditorGUI.PropertyField(rect, element, new GUIContent("フレーム" + index));
            };
        }

        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            serializedObject.Update();
            reorderableList.DoLayoutList();
            serializedObject.ApplyModifiedProperties();
        }
    }
#endif
}
```

Inspectorはこんな感じです。
Loopのチェックをオフにすると単発再生ができて、途中でオフにすると止まります。
![SpriteAnimation.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/6045f3bd-9b9d-fa2a-2073-224bce977c0e.png)

[ReorderableList](https://qiita.com/OKsaiyowa/items/91b45916c4902a9b2394)を使っているのでなかなかの使い心地です。



![chain_2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244071/0eb7f231-e3da-3f11-a14b-330d1df21c43.gif)