「Unity 連番画像」でググるといっぱいありますが
・1周したあとに自動停止
・すきなタイミングでもう一度再生
の機能がほしくなったので、つくってみました。
※素人なのでコードに無駄あるかも
※ビルド後の容量デカくてもなんでもいいよって方向け
※スマホビルドは検証してないです
(FHDの画像400枚ほど入れて、standaloneで700MBくらいになってます。。。!!!(やばい))
##実行環境
・Unity 2019.1.8f1
##GifMaker.cs
以下C#ファイルを準備。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class GifMaker : MonoBehaviour {
public Image img;
public string folderName;
public string headText;
public int imageLength;
public bool IsFirstNum1;
public bool EnableSkipFirst;
private bool Flg;
private int firstFrameNum;
private int _firstFrameNum;
void Start()
{
if(IsFirstNum1)
{
_firstFrameNum = 1;
}
else
{
_firstFrameNum = 0;
}
if(EnableSkipFirst)
{
_firstFrameNum = _firstFrameNum + 1;
}
firstFrameNum = _firstFrameNum;
}
void Update()
{
if(!Flg) return;
//最後の画像を超えたら 最初に戻る
firstFrameNum++;
if(firstFrameNum > imageLength) firstFrameNum = _firstFrameNum;
string _fixedFirstFrameNum = (firstFrameNum).ToString();
if (firstFrameNum < 10) {
_fixedFirstFrameNum = "0" + _fixedFirstFrameNum;
}
//画像変更
Sprite tex = Resources.Load<Sprite>(folderName + "/" + headText + _fixedFirstFrameNum);
img.sprite = tex;
Debug.Log("img.sprite.name = " + img.sprite.name);
//一周したら停止
if(firstFrameNum == imageLength)
{
SetFlg(false);
}
}
public void SetFlg(bool _flg)
{
Debug.Log("SetFlg( " + _flg + " )");
if(_flg == true)
{
firstFrameNum = _firstFrameNum;
Sprite tex;
if(IsFirstNum1)
{
if(EnableSkipFirst)
{
tex = Resources.Load<Sprite>(folderName + "/" + headText + "02");
}
else
{
tex = Resources.Load<Sprite>(folderName + "/" + headText + "01");
}
}
else
{
if(EnableSkipFirst)
{
tex = Resources.Load<Sprite>(folderName + "/" + headText + "01");
}
else
{
tex = Resources.Load<Sprite>(folderName + "/" + headText + "00");
}
}
img.sprite = tex;
Debug.Log("img.sprite.name = " + img.sprite.name);
}
Flg = _flg;
}
public bool GetFlg()
{
return Flg;
}
}
##手順
###画像をAssets/Resources以下にインポートする
Texture TypeはSprite(2D and UI)に設定にすることも忘れずに。
###Imageオブジェクトを用意し、GifMakerを追加する
Image
Scource Image・・・連番の最初の画像を設定
Gif Maker
Img・・・このImageオブジェクト自身を設定 ※Start()で取得だと再生に間に合わなくNullエラー発生する
Folder Name・・・Resources以下のディレクトリ名
Head Text・・・画像ファイルの先頭文字 ※img_001
であればimg_0
になる
Image Length・・・連番の最後の数字
Is First Num 1・・・連番画像の最初の数字が1の場合、✔をいれます
Enable Skip First・・・連番の最初の画像だけとばしたい場合、✔をいれます
同じ手順で、別のImageオブジェクトをつくってもそれぞれ再生可能です。
##おまけ機能☺
・連番の始まりは0でも1でもOK
・連番の最初の画像だけスキップする処理を入れることも可(手動で最初の画像を消すこともできるけど、連番ファイルをリネームで直すの大変なので)
・Timeではなく、FPSに合わせて再生されます。※FPS設定手順⇒【Unity】フレームレートの上げ方
・再生中か停止中かを検知することも可能です
##うまく動かない場合
・連番が繰り返し再生される
→Image Lengthの値が合ってない可能性があります。
・fpsが反映されない
→全てのLevelでDon't Syncを設定をしてみてください。
##参考
https://qiita.com/a_nishimura/items/d1c33b3c3e3c5189f36a
Resourcesから生成する部分はこちらを参考にさせて頂きました!
##まとめ
フォルダ参照なので
大量に画像があってもサクッとできます◎(容量はやばいね)