【Unity】UnityRecoderをスクリプトから操作し自動で録画・停止をする

UnityRecoderのインストール

Windows → パッケージマネージャー → Unityレジストリ内からインストールする。(検索でRecorderと入力するとすぐに見つかる)

UnityRecoderをスクリプトから操作

インストールしただけだど、クラスにアクセスできなかったが、サンプル → Movie Sampleをインストールすることで、操作するクラスにアクセスできるようになる。

#if UNITY_EDITOR
using UnityEngine;
using System.IO;
using UnityEditor.Recorder;
using UnityEditor.Recorder.Encoder;
using UnityEditor.Recorder.Input;

public class AutoRecorder : MonoBehaviour
{
    private RecorderController recorderController;

    [Header("出力フォルダ名(英語)")] [SerializeField] string outputFileName = "SampleRecordings";
    [Header("出力ファイル名(英語)")][SerializeField] string videoName = "videoName"; //日本語が入るとエラーが発生する

    public void Setting()
    {
        var settings = ScriptableObject.CreateInstance();
        var movieRecorderSettings = ScriptableObject.CreateInstance();

        //movieRecorderSettings.OutputFile = "recordings/recording";
        movieRecorderSettings.ImageInputSettings = new GameViewInputSettings
        {
            OutputWidth = 1920,
            OutputHeight = 1080
        };

        movieRecorderSettings.EncoderSettings = new CoreEncoderSettings
        {
            EncodingQuality = CoreEncoderSettings.VideoEncodingQuality.Medium,
            Codec = CoreEncoderSettings.OutputCodec.MP4
        };

        movieRecorderSettings.CaptureAudio = false; //音声をキャプチャするか

        var mediaOutputFolder = new DirectoryInfo(Path.Combine(Application.dataPath, "..", outputFileName));  //アウトプットファイル名(無ければ生成される)
        movieRecorderSettings.OutputFile = mediaOutputFolder.FullName + "/" + videoName; //ビデオ名

        settings.AddRecorderSettings(movieRecorderSettings);
        settings.SetRecordModeToManual();
        recorderController = new RecorderController(settings);
    }

   public void StartRecord()
    {
        if (!recorderController.IsRecording())
        {
            recorderController.PrepareRecording();
            recorderController.StartRecording();
            Debug.Log("録画スタート");
        }
    }

  public void EndRecord()
    {
        if (recorderController.IsRecording())
        {
            recorderController.StopRecording();
            Debug.Log("録画停止");
        }
    }
}

#endif

上のスクリプトをオブジェクトにアタッチし、他のスクリプトからStartRecord()関数、EndRecord()関数を呼び出すことで実行中に録画の開始、停止をすることができる。

ただし、StartRecord()関数を呼ぶ前に必ず、一度Setting()関数を実行しておく必要があります。

また、出力ファイル名が日本語だと、出力は完了できるがUnity上でエラーが発生します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です