Unity エディターを使ってゲーム実況録画を作成

2024年5月28日

Unityパッケージから、Unity Recoderパッケージをインストールして、ゲーム実況録画(プロモーションビデオ)を作成してみましょう
Unity Recorderは、プレイ中のUnity Editorからアニメーション、ビデオ、イメージ、オーディオなどのデータをキャプチャして保存することができます。

このツールは、Unity Technologyが開発しているものです。録画以外にも静止画キャプチャにも対応しています。
開発PCのパフォーマンスが低くても、なめらかな映像を残すことができます

インストール

[Window]メニュー から [Package Manager]を選択し、Recorderをインストールします。

バージョンによっては次のように表示されます

使い方

動画形式の設定

[Window]メニューから[General] →[Recorder] →[Recorder Window]を開きます。

Add Recorder(レコーダーの追加)ボタンをクリックします

何をキャプチャーしたいか選択します

次のような設定画面になります
今回は、デフォルトのMP4形式で保存します
その他の設定もデフォルトのままでいいでしょう

OutputResolutionがMatch Window Sizeを選択して、次のエラーが出ることがあります
他の解像度を選択するか、Unityエディターで Gameビューで解像度を定義しておきましょう

どうしても粗いのが気になる場合、ファイルサイズは大きくなりますが、次のような設定を試してみましょう

設定内容

  • ファイルの保存場所 プロジェクトが保存されているフォルダ(上記では、Recordingsフォルダ)
  • ファイル名のパターン movie_XXX
  • ファイルの追加ごとに変わる名前部分
    movie_001.mp4 movie_002.mp4 movie_003.mp4 というふうに変わっていきます。

クイック起動したい場合

上記画面で赤い録画ボタンを押しても構いませんが、WindowメニューからQuick Recordingを選択することですぐ実行します(ショートカットは、F10

Gameウィンドウの録画がスタート

選択と同時にPlayMode(ゲーム開始)になり、録画が始まります。

Gameビューをクリックして、実際にゲームを進めます。

ゲーム実行している間、録画が継続して行われています。

保存

レコーダー画面、上部のSTOP RECORDING(または、赤丸に白三角の録画アイコン)unityをクリックすることで、録画を停止しファイルへの保存までが自動的に行われます。
設定したPathへファイルが保存されています。
エクスプローラーから、このmp4形式のビデオを実行してみて確認します

コードで制御

Package ManagerのRecorderのサンプルで取得できます

画像はUnityのパッケージマネージャーのスクリーンショットで、「Recorder」パッケージのバージョン4.0.2が表示されています。右側のパネルに「Samples」タブが選択されており、いくつかのサンプルが表示されています。これらのサンプルは、「Screenshot Capture Sample」、「Custom Encoder: FFmpeg」、「Movie Recorder Sample」、「Multiple Recordings Sample」、「Recorder Editor Sample」です。

それぞれのサンプルの説明は以下の通りです:

  1. Screenshot Capture Sample:
    • スクリプトを使用して録画セッションを設定する方法を示しています。
    • サイズ:2.2 KB
  2. Custom Encoder: FFmpeg:
    • FFmpegのようなカスタムコマンドラインエンコーダをMovie Recorderに統合するための例です。
    • FFmpeg実行ファイルが必要です。
    • サイズ:34.26 KB
  3. Movie Recorder Sample:
    • スクリプトを使用してムービー録画セッションを設定する方法を示しています。
    • サイズ:3.3 KB
  4. Multiple Recordings Sample:
    • スクリプトを使用して複数の録画セッションを設定する方法を示しています。
    • サイズ:4.53 KB
  5. Recorder Editor Sample:
    • 「Start Recording」および「Stop Recording」メニュー項目を追加する方法を示しています。
    • サイズ:2.43 KB

これらのサンプルは、「Reimport」ボタンをクリックすることでプロジェクトにインポートすることができます。必要に応じて、各サンプルを試してみて、Recorderパッケージの機能を学ぶことができます。

例)エディター実行時に自動的に保存が開始されるスクリプト

#if UNITY_EDITOR

using System.ComponentModel;
using System.IO;
using UnityEditor;
using UnityEditor.Recorder;
using UnityEditor.Recorder.Encoder;
using UnityEditor.Recorder.Input;

namespace UnityEngine.Recorder.Examples
{
    /// <summary>
    /// この例では、スクリプトを使用してMP4ファイルの録画セッションを設定する方法を示します。
    /// この例を使用するには、MovieRecorderExampleコンポーネントをGameObjectに追加してください。
    ///
    /// Playモードに入ると録画が開始されます。
    /// 録画はPlayモードを終了するか、コンポーネントを無効にすると自動的に停止します。
    ///
    /// このスクリプトは録画出力を[プロジェクトフォルダー]/SampleRecordingsに保存します。
    /// </summary>
    public class MovieRecorderExample : MonoBehaviour
    {
        RecorderController m_RecorderController;
        public bool m_RecordAudio = true;
        internal MovieRecorderSettings m_Settings = null;

        public FileInfo OutputFile
        {
            get
            {
                var fileName = m_Settings.OutputFile + ".mp4";
                return new FileInfo(fileName);
            }
        }

        void OnEnable()
        {
            Initialize();
        }

        internal void Initialize()
        {
            var controllerSettings = ScriptableObject.CreateInstance<RecorderControllerSettings>();
            m_RecorderController = new RecorderController(controllerSettings);

            var mediaOutputFolder = new DirectoryInfo(Path.Combine(Application.dataPath, "..", "SampleRecordings"));

            // Video
            m_Settings = ScriptableObject.CreateInstance<MovieRecorderSettings>();
            m_Settings.name = "My Video Recorder";
            m_Settings.Enabled = true;

            // This example performs an MP4 recording
            m_Settings.EncoderSettings = new CoreEncoderSettings
            {
                EncodingQuality = CoreEncoderSettings.VideoEncodingQuality.High,
                Codec = CoreEncoderSettings.OutputCodec.MP4
            };
            m_Settings.CaptureAlpha = true;

            m_Settings.ImageInputSettings = new GameViewInputSettings
            {
                OutputWidth = 1920,
                OutputHeight = 1080
            };

            // Simple file name (no wildcards) so that FileInfo constructor works in OutputFile getter.
            m_Settings.OutputFile = mediaOutputFolder.FullName + "/" + "video";

            // Setup Recording
            controllerSettings.AddRecorderSettings(m_Settings);
            controllerSettings.SetRecordModeToManual();
            controllerSettings.FrameRate = 60.0f;

            RecorderOptions.VerboseMode = false;
            m_RecorderController.PrepareRecording();
            m_RecorderController.StartRecording();

            Debug.Log($"Started recording for file {OutputFile.FullName}");
        }

        void OnDisable()
        {
            m_RecorderController.StopRecording();
        }
    }
}

#endif

参考

公式マニュアル

キャプチャ(画像の保存)等、細かな操作は、このページを参考にされてはどうでしょう。

Unity,小技

Posted by hidepon