unity-代码控制录屏UnityRecorder

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Recorder;
using UnityEditor.Recorder.Input;
using UnityEngine;

public enum RecorderControllerState
{
    Video,
    Animation,
    ImageSequence
}

/// <summary>
/// 录制
/// </summary>
public class NewBehaviourScript : MonoBehaviour
{
    RecorderController m_RecorderController;

    private RecorderControllerState controllerState = RecorderControllerState.Video;
    [Header("下面两个单纯观看数据,不用管")]
    public RecorderControllerSettings controllerSettings;
    public MovieRecorderSettings videoRecorder;

    private string animationOutputFolder;
    private string mediaOutputFolder;

    private void Start()
    {
        controllerSettings = ScriptableObject.CreateInstance<RecorderControllerSettings>();
        m_RecorderController = new RecorderController(controllerSettings);
        animationOutputFolder = Application.dataPath + "/SampleRecordings";
        mediaOutputFolder = Application.dataPath + "../SampleRecordings";

    }

    /// <summary>
    /// 开始记录视频
    /// </summary>
    /// <param name="state">默认视频</param>
    public void StartRecorder(RecorderControllerState state = RecorderControllerState.Video)
    {

        //var outputFolder = Application.dataPath + "/SampleRecordings";
        switch (state)
        {
            case RecorderControllerState.Video:

                // Video
                RecorderVideo();

                break;
            case RecorderControllerState.Animation:

                // Animation
                RecorderAnimation();
                break;
            case RecorderControllerState.ImageSequence:

                // Image Sequence
                RecorderImageSequence();
                break;

            default:
                break;
        }
        // Setup Recording

        controllerSettings.SetRecordModeToManual();
        controllerSettings.frameRate = 10.0f;

        Options.verboseMode = false;
        m_RecorderController.StartRecording();
    }

    /// <summary>
    /// 录制视频
    /// </summary>
    private void RecorderVideo()
    {
        videoRecorder = ScriptableObject.CreateInstance<MovieRecorderSettings>();
        videoRecorder.name = "My Video Recorder";
        videoRecorder.enabled = true;

        videoRecorder.outputFormat = VideoRecorderOutputFormat.WEBM;
        videoRecorder.videoBitRateMode = VideoBitrateMode.High;

        videoRecorder.imageInputSettings = new GameViewInputSettings
        {
            outputWidth = 1920,
            outputHeight = 1080
        };

        videoRecorder.audioInputSettings.preserveAudio = true;
        string str = DateTime.Now.Year.ToString() + "_" + DateTime.Now.Month + "_" + DateTime.Now.Day + "_" + DateTime.Now.Hour + "_" + DateTime.Now.Minute + "_" + DateTime.Now.Second;
        videoRecorder.outputFile = mediaOutputFolder + "/Magic_" + str;
        controllerSettings.AddRecorderSettings(videoRecorder);
    }

    /// <summary>
    /// 动画
    /// </summary>
    private void RecorderAnimation()
    {
        var animationRecorder = ScriptableObject.CreateInstance<AnimationRecorderSettings>();
        animationRecorder.name = "My Animation Recorder";
        animationRecorder.enabled = true;

        var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);

        animationRecorder.animationInputSettings = new AnimationInputSettings
        {
            gameObject = sphere,
            recursive = true,
        };

        animationRecorder.animationInputSettings.AddComponentToRecord(typeof(Transform));

        animationRecorder.outputFile = animationOutputFolder + "/animation_" + DefaultWildcard.GeneratePattern("GameObject") + "_" + DefaultWildcard.Take;

        controllerSettings.AddRecorderSettings(animationRecorder);
    }

    /// <summary>
    /// 图像序列
    /// </summary>
    private void RecorderImageSequence()
    {
        var imageRecorder = ScriptableObject.CreateInstance<ImageRecorderSettings>();
        imageRecorder.name = "My Image Recorder";
        imageRecorder.enabled = true;

        imageRecorder.outputFormat = ImageRecorderOutputFormat.PNG;
        imageRecorder.captureAlpha = true;

        imageRecorder.outputFile = mediaOutputFolder + "/image_" + DefaultWildcard.Frame + "_" + DefaultWildcard.Take;

        imageRecorder.imageInputSettings = new CameraInputSettings
        {
            source = ImageSource.MainCamera,
            outputWidth = 1920,
            outputHeight = 1080,
            captureUI = true
        };

        controllerSettings.AddRecorderSettings(imageRecorder);
    }

    /// <summary>
    /// 停止录制
    /// </summary>
    public void StopRecorder()
    {
        Debug.Log("停止录制");
        m_RecorderController.StopRecording();
        controllerSettings.RemoveRecorder(videoRecorder);
    }

    void OnDisable()
    {
        StopRecorder();
    }
}

由于在代码中引入了using UnityEditor;
using UnityEditor.Recorder;
using UnityEditor.Recorder.Input;

这是unity编辑器的,所以加入此代码不能发布,会报错

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Unity RecorderUnity的一个插件,可以用于录制游戏或应用程序的屏幕。它可以在Unity编辑器中直接使用,也可以在运行时通过脚本控制录制的开始和结束。Unity Recorder支持多种录制设置,包括屏幕分辨率、帧率、录音等。它还可以录制不同的输出格式,例如视频、动画、图像序列等。 Unity Recorder的2018版本引入了一些新功能。首先,它增加了对高动态范围(HDR)渲染目标的支持,使得录制的画面能够更加真实和逼真。其次,它改进了对Unity Post Processing Stack的支持,可以更好地捕捉后期处理效果。另外,Unity Recorder还增加了对Oculus Rift和HTC Vive等虚拟现实设备的支持,可以录制VR游戏的画面。 除了录制游戏画面外,Unity Recorder还可以录制音频。通过与Unity的Audio Source组件配合使用,可以实现对游戏中的音效和音乐进行录制。这对于制作游戏宣传视频或教学视频非常有用。 总的来说,Unity RecorderUnity中一个非常实用的工具,可以帮助开发者轻松地录制和分享游戏或应用程序的画面和音频。它的2018版本引入了一些新功能,使得录制过程更加高质量和便捷。无论是制作游戏宣传视频、教学视频,还是进行游戏开发和测试,Unity Recorder都是一个不可或缺的工具。 ### 回答2: Unity Recorder是一款适用于Unity引擎的插件,用于在游戏或应用程序中进行屏幕录制。它可以将游戏过程或应用界面以视频的形式保存下来,方便开发者和设计师进行调试、分享和演示。Unity Recorder支持多种录制模式,包括相机录制、屏幕录制和音频录制等。 Unity Recorder能够录制整个游戏窗口和游戏里的特定相机视图。对于开发者来说,这是一个非常有用的功能,可以帮助他们回溯和修复游戏中的问题。设计师可以利用这个工具来记录可视化特效和游戏剧情。使用Unity Recorder可以非常方便地录制高质量的游戏截图和演示视频。 在2018版本中,Unity Recorder进行了一系列的更新和改进。最显著的就是增加了对高分辨率录制的支持,这意味着现在开发者可以在更大的分辨率下录制游戏画面,以获取更高质量的录制效果。此外,Unity Recorder还升级了其用户界面,更加直观和易于使用。新版还增加了对新的视频格式的支持,提供了更多的输出选项。 总而言之,Unity Recorder是一款强大的Unity插件,可以帮助开发者和设计师轻松地录制游戏画面和特效。它在2018版本中进行了一系列的更新和改进,为用户提供更好的录制体验和更高质量的输出效果。无论是用于调试、演示还是分享,Unity Recorder都是一个非常有用的工具。 ### 回答3: Unity RecorderUnity官方提供的一个工具,它可以用于在Unity游戏或应用程序中录制视频或音频。2018年版本的Unity Recorder相对于之前的版本进行了一些改进和增强。 首先,Unity Recorder可以录制多种不同的内容,包括全屏录制、摄像机录制、Game View录制以及视图录制。用户可以根据需要选择合适的录制方式,满足不同的录制需求。 其次,Unity Recorder支持多种导出格式,包括GIF、MP4、WebM、EXR等。用户可以根据需要选择合适的导出格式和设置导出参数。 另外,Unity Recorder还可以与Unity Timeline集成,使得用户可以方便地在时间轴中创建和管理录制事件。用户可以在时间轴中按照需要安排录制的开始和结束时间,以及其他相关设置。 此外,Unity Recorder还提供了一些有用的功能,比如Zoom、Focus、BackgroundColor等,可以帮助用户更好地控制录制过程中的画面和效果。 总的来说,Unity Recorder是一个非常方便实用的工具,可以帮助开发者和创作者轻松实现游戏或应用程序的录制和导出。它的功能和易用性都有所提升,可以更好地满足用户的需求。无论是开发者还是创作者,都可以通过Unity RecorderUnity中进行高质量的录屏工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值