zoukankan      html  css  js  c++  java
  • Unity3D windows平台视频录制录屏插件 UnityRecorder

    例子:从官方例子简单改了

    using UnityEditor;
    using UnityEditor.Recorder;
    using UnityEditor.Recorder.Input;
    using System;

    namespace UnityEngine.Recorder.Examples
    {
    public enum RecorderControllerState
    {
    Video,
    Animation,
    ImageSequence
    }

    /// <summary>
    /// 录制
    /// </summary>
    public class RecorderExammlpText : 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";

    }

    private void Update()
    {
    if (Input.GetKeyDown(KeyCode.A))
    {
    StartRecorder();
    }
    if (Input.GetKeyDown(KeyCode.D))
    {
    StopRecorder();
    }
    }

    #region 记录视频-结束视频 位置在项目根目录

    /// <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 = 60.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.MP4;
    videoRecorder.videoBitRateMode = VideoBitrateMode.Low;

    // videoRecorder.SetOutput_720p_HD(); GameViewInputSettings 修改屏幕分辨率
    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);
    }

    #endregion


    void OnDisable()
    {
    StopRecorder(http://www.my516.com);

    }
    }
    }

    --------------------- 

  • 相关阅读:
    Marketcetera中TradeBase所依赖的RoR的gems
    单点登录的实现[转]
    在服务中调用外部的窗体程序出现的问题(转载)
    [转]c#创建access查询
    [转]解决技术问题的一些个人经验
    JSF kick start [转]
    An existing Marketcetera MySQL Server 5.0 instance has been detected. Marketcetera requires it's own instance of MySQL
    编写你自己的单点登录(SSO)服务(转载)
    CAS与LDAP整合的实现[转]
    ASP.NET 配置文件纵横谈(三)
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11044448.html
Copyright © 2011-2022 走看看