Roba Memo - 素人のUnity覚書と奮闘記

素人のUnity覚書と奮闘記

パラパラアニメーション コルーチン編

これのコルーチン編
robamemo.hatenablog.com

仕様

・Image単体をprefabにしてCanvasに配置し、再生後はフェードアウトしてDestroy()する
・スプライトはリソースから連番で読み込む

コード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Movie : MonoBehaviour
{
    [Header ("スプライトを読み込むImage")]
    [SerializeField]Image img;
    [Header ("スプライトへのパス")]
    [SerializeField]string path;
    [Header ("最初の画像番号")]
    [SerializeField]int counter;
    [Header ("最後の画像番号")]
    [SerializeField]int last;
    [Header ("フレームレート")]
    [SerializeField]int framerate;
    [Header ("フェードアウト秒数")]
    [SerializeField]float fade_speed;

    int def_quality;
    int def_framerate;

    void Start ()
    {
        def_quality = QualitySettings.vSyncCount;
        def_framerate = Application.targetFrameRate;
        QualitySettings.vSyncCount = 0;
        Application.targetFrameRate = framerate;
        StartCoroutine (OnStart ());
    }

    IEnumerator OnStart ()
    {
        while (counter <= last) {
            //画像番号の前に 0 がつかない場合はnumを削除
            string num = "";
            if (counter < 10) {
                num = "000" + counter.ToString ();
            } else if (counter < 100) {
                num = "00" + counter.ToString ();
            } else if (counter < 1000) {
                num = "000" + counter.ToString ();
            } else {
                num = counter.ToString ();
            }

            //画像番号の前に 0 がつかない場合は (path + counter.ToString ());
            img.sprite = Resources.Load<Sprite> (path + num);
            counter++;

            yield return null;
        }

        Application.targetFrameRate = def_framerate;
        QualitySettings.vSyncCount = def_quality;
        StartCoroutine (OnComplete ());
        yield break;

    }

    IEnumerator OnComplete ()
    {

        Color color = img.color;
        float variation = color.a / fade_speed;

        while (color.a > 0f) {
            color.a -= variation * Time.deltaTime;
            img.color = color;

            yield return null;
        }

        Destroy (this.gameObject);

        yield break;

    }
}

設定

f:id:nico-taniku:20170926180023p:plain:w300
f:id:nico-taniku:20170926171445p:plain:w200

開始コード

スクリプトで配置する場合

GameObject prefab = Resources.Load<GameObject> ("prefabへのパス");
GameObject movie = Instantiate (prefab);
movie.transform.SetParent (GameObject.Find ("親ゲームオブジェクト名").transform);
movie.transform.localPosition = Vector3.zero;
movie.transform.localScale = Vector3.one;

以上