この記事は
『プログラミング完全未経験からUnityでの開発現場に迎え入れてもらえた世界一の幸せ者』
の記事です。そのつもりでお読みください。
##GIF画像を作る
2019/04/20 追記
最強のGif画像作成ツールを教えてもらいましたとさ。めでたしめでたし。。。
「いいから黙って使わせろ」という方はこちらからダウンロードしてください→GitHub
Unityで動画やGIF画像無しに説明するのしんどいので調べました。
ありました→https://github.com/Chman/Moments.git
ダウンロードして解凍してUnityのProjectにぶち込みます。
私がぶち込んだ際にはエラーが出ました。でも慌てないでください。
深呼吸してエラーメッセージを読みましょう。
私のエラーはMinAttribute
というクラス名を違う適当な名前に変更したら消えました。
使い方を書きます。
##使い方
###①既存のScriptに追加
Recorder
というScriptを開きます。
Recorderクラスのフィールドにfloat returnBufferSize;
を追加し、
下記メソッドを追加します。
public float ReturnBufferSize()
{
return returnBufferSize = m_BufferSize;
}
m_BufferSize
というのは録画時間のことを指します。
次の工程で録画時間を他クラスに渡す必要があります。
そこで、録画時間を返すメソッドを用意しました。
###②新しいScriptを作る
便利なメソッドがたくさん用意されていたので助かりました。
ところどころよくわかりませんが動いたので良しとしましょう。
追記:2019/02/01
すみません、なんか間違えたっぽいんで直しました。
using UnityEngine;
using System;
using Moments;
using System.Collections;
public class Rec : MonoBehaviour
{
bool isRec;
bool isSave;
int countTryRec;
Recorder rec;
Coroutine runCoroutine;
void Start()
{
print("Rで録画開始");
rec = GetComponent<Recorder>();
rec.OnPreProcessingDone = OnProcessingDone;
rec.OnFileSaveProgress = OnFileSaveProgress;
rec.OnFileSaved = OnFileSaved;
//BufferSizeがfloatだとめんどうなのでエラーメッセージで忠告する
if (rec.ReturnBufferSize() - (int)rec.ReturnBufferSize() != 0)
{
Debug.LogError("BufferSizeを自然数にしろ");
}
}
//保存開始時
void OnProcessingDone()
{
print("保存開始");
}
//保存中 idという引数はよくわからん
void OnFileSaveProgress(int id, float percent)
{
print("保存中:" + Math.Truncate(percent * 100.0) + "/" + "100%");
}
//保存終了時 idという引数はよくわからん
void OnFileSaved(int id, string filepath)
{
print("保存完了:" + "100" + "/" + "100%" + filepath);
isSave = false;
}
void Update()
{
//録画 -> 録画中、セーブ中は押せない
if (Input.GetKeyDown(KeyCode.R) && isRec == false)
{
runCoroutine = StartCoroutine(RecCountDown());
}
}
//録画開始~終了まで
IEnumerator RecCountDown()
{
isRec = true;
float second = 1f;
int count = 0;
//録画カウントダウン
print("録画開始まで");
yield return new WaitForSeconds(second);
print("3");
yield return new WaitForSeconds(second);
print("2");
yield return new WaitForSeconds(second);
print("1");
yield return new WaitForSeconds(second);
print("開始");
rec.Record();
//残り秒数の表示
for (int i = 0; i < rec.ReturnBufferSize(); i++)
{
yield return new WaitForSeconds(second);
count++;
print("録画時間" + ":" + count + "/" + rec.ReturnBufferSize()+"秒");
}
//録画終了
print("録画終了");
//保存開始
rec.Save();
yield return new WaitForSeconds(second);
isRec = false;
StopCoroutine(runCoroutine);
}
}
使いどころとしては以下3つくらいだと思います。
パラメーター名 | 機能 |
---|---|
Frame Per Second | 小さいとカクカク、大きいとヌルヌル |
Repeat | 画像の繰り返し回数 |
Buffer Size | 再生時間(録画時間) |
##実際に動かしてみた
キーボードのR
で録画のカウントダウンが開始します。
3秒後(正確には4秒後)に録画が開始されます。
録画開始後は録画終了までの秒数が表示されます。
もう一度録画をやり直したい場合はR
を、保存したい場合はS
を押します。
勝手に保存されるように変更しました。
保存開始後は保存終了までのパーセンテージが表示されます。
保存完了後はファイルの保存場所が表示されます。
Editorウインドウを一度たたんで開くと保存されています。
追記(2019/03/02):ProjectWindowのRefresh機能を追加しました。
###BufferSizeは自然数で
エラーメッセージの通りです。
これのおかげでいろんな記事が書けるようになった気がします。
もっとこうした方がいいとか、他の簡単な方法とかあれば教えてください。
個人的にはシーンビューをGIFにできたら便利だなーと思いました。