拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Unity Recorder内录实操:录制游戏画面与游戏音频的官方插件指南

在做 Unity 项目演示、Bug 复现、UI 动效验收、版本宣传素材的时候很多开发者第一反应是打开 OBS 录屏或者干脆用手机对着显示器拍。但如果你只是想把 Unity 里的游戏画面和游戏音频干净地录下来其实 Unity 官方就提供了一个免费插件Unity Recorder。这篇文章就聚焦一件事如何使用 Unity 自带插件完成内录。这里要先给一个明确判断Unity Recorder 的价值不是“录整个电脑屏幕”而是在编辑器内以高可控度录制游戏视图Game View和游戏音频。它会把场景中 AudioListener 听到的声音同步记录到视频中。换句话说它能录“游戏内部的声音”但不能直接录“桌面系统声音”。理解了这条边界后面所有配置都不会再让人困惑。读完本文你会知道 Recorder 怎么安装、怎么录制画面、怎么把游戏音频和麦克风声音混入视频以及为什么系统桌面声音需要绕道处理。1. 这篇文章真正要解决的问题1.1 “Unity 自带插件”到底是什么很多新手听到“自带插件”会以为 Unity 安装目录里已经内置了一个录屏按钮。其实并非如此。Unity 官方把 Recorder 以包Package的形式分发需要通过 Package Manager 安装就像安装 Post Processing、Timeline 一样。它不会随新建项目默认开启但完全免费属于官方维护的开发工具。在实际开发中你可能会遇到下面这些场景策划说“把这个战斗动画录成视频发给我”可你不想为了录个屏去切窗口、开额外软件。QA 反馈“这里有个 Bug我录一段操作过程给你”但录屏软件录出来的文件很大还夹杂着桌面任务栏。你想在版本发布前自动生成一段实机演示视频放到项目目录里给团队确认。你想把某个相机单独渲染的画面录出来而不是录整个 Game View。这些问题本质上是同一个需求在 Unity 编辑器内按可配置的方式录制游戏画面和声音而不是录整个电脑屏幕。1.2 音频内录的真正难点真正的难点在声音。普通录视频只需要考虑画面但“内录”天然带有“声音不从音箱外放”的含义不要在物理层面用麦克风去录电脑扬声器而是直接在数字音频层面拿到音源。Unity Recorder 在这方面有一个和直觉不同的设计它录的不是系统声卡输出而是场景里 AudioListener 采集到的声音信号。因此游戏里正常播放的 AudioClip 都能被录进去但你开着浏览器放的歌、在线会议里同事的声音Unity 完全听不到。很多人在这一步卡住装上 Recorder画面录出来了打开视频却没有声音或者想“内录”电脑桌面正在播放的声音结果发现 Recorder 压根没有提供系统声卡输入选项。并不是插件坏了而是它的音频模型决定的。1.3 什么样的人适合读这篇文章如果你属于下面几类读者这篇内容能帮你少走弯路Unity 开发者需要给策划、美术、QA 快速提供视频反馈。测试工程师需要记录 Bug 复现流程而且希望视频里包含操作时的游戏音效。独立开发者需要为自己的游戏制作宣传视频或版本演示。工具链开发者想在编辑器里写脚本自动触发录制甚至接入 CI 流程。如果你只是临时想录整个电脑屏幕OBS 这类工具更合适。如果你想在 Unity 生态内做可控、可复用、可自动化的内录流程Recorder 是首选方案。2. Unity Recorder 核心概念与音频内录原理2.1 Recorder 的三种使用方式Unity Recorder 不是单指某个按钮而是一整套录制框架。从使用方式上看主要有三种Recorder Window通过编辑器窗口手动创建录制任务适合临时录屏、调参数。Recorder Controller通过 C# 脚本在编辑器内触发录制适合自动化。Recorder Track通过 Timeline 录制适合把录制动作编进时间轴流程。这三种方式最终都依赖同一套底层录制管线配置概念是相通的。所以先理解 Recorder Window 里的配置项再去看代码和 Timeline会轻松很多。2.2 录制源的选择创建录制任务时首先要回答一个问题录什么画面Recorder 常见的录制源包括Game View录制当前游戏视图窗口的内容所见即所得最简单。Targeted Camera指定某台摄像机只录这台相机渲染的画面不受 UI 或其它相机叠加影响。360 View用于 360 全景视频通常在 VR 项目里使用。Render Texture / Animation Clip分别对应渲染纹理输出和动画片段录制属于进阶用法。对大多数内录需求来说Game View 是默认选择因为它会把你正在调试的场景内容如实地录下来。需要更干净的输出时再切换到 Targeted Camera。2.3 输出类型Recorder 能输出的并不是只有 MP4常见的输出类型包括Movie输出视频文件例如 MP4、WebM、MOV。Image Sequence输出一帧一张 PNG 或 JPEG 序列帧方便后期合成。GIF Animation输出 GIF 动图适合快速预览和笔记记录。Animation Clip把物体动画记录成 Unity 动画片段这个用途比较特殊适合工具类开发。如果你要给策划看直接录 MP4 是最省事的。如果要进后期推荐 Image Sequence因为它不依赖视频编码渲染质量更可控。2.4 音频内录原理Unity 项目的 3D 场景中通常有一个或多个 AudioListener 组件它是 Unity 混音系统的“耳朵”。所有 AudioSource 经过衰减、混响、分组之后最终会被 AudioListener 接收。Recorder 录制音频时截取的正是这个信号。把这个原理记住很多问题就迎刃而解游戏里的背景音乐、音效、语音都会被录进视频。AudioMixer 里的音量、效果器也会如实反映到录制结果中。麦克风声音不会天然出现在 AudioListener 里需要把麦克风采集的数据接入 AudioSource。系统播放器、浏览器的声音不会出现在 AudioListener 里所以 Recorder 直接录不到。如果你静音了 Master 总线录制出来同样没有声音。录制目标Unity Recorder 能否直接录制推荐做法游戏画面Game View能Recorder Window 配置 Game View游戏内播放的音效和音乐能勾选音频录制来源选 AudioListener麦克风声音能但需要绕路将麦克风接入 AudioSource 再混音桌面系统播放的声音不能直接录制使用虚拟声卡或外部录屏工具这个小表格基本概括了本文所有操作背后的判断逻辑。3. 环境准备与 Recorder 安装3.1 环境建议Recorder 插件对 Unity 版本有兼容性要求不同版本的 Recorder 包行为和界面可能有差异。稳妥的做法是使用 Unity 2019.4 或更高版本并且从 Package Manager 中安装当前项目可用的最新版本。如果你用的是 URP 或 HDRP 渲染管线Recorder 也可以正常工作但录制相机画面时需要注意渲染管线的差异。建议先在空场景里做一次最小验证再进入正式录制避免把时间浪费在环境问题上。3.2 通过 Package Manager 安装安装步骤很简单打开 Unity 项目点击菜单 Window Package Manager。在 Package Manager 左上角下拉框选择 Unity Registry。在搜索框输入 Recorder。找到 Unity Recorder 包点击 Install。等待安装完成后关闭 Package Manager。安装成功后菜单栏会出现 Recorder 相关入口。一般可以在 Window General Recorder Recorder Window 找到录制窗口不同版本入口可能略不同。如果没找到重启编辑器再确认。3.3 使用 manifest.json 锁定依赖如果团队项目希望统一 Recorder 版本可以直接在项目根目录的Packages/manifest.json中增加依赖。打开该文件在dependencies节点中新增{ dependencies: { com.unity.recorder: 4.0.2 } }注意具体版本号以你在 Package Manager 中实际可用的版本为准不要照抄。当团队使用 Unity 版本管理时统一在 manifest.json 中声明依赖可以避免每个成员手动安装的版本不一致。3.4 验证安装安装后如何确认插件可用打开 Recorder Window如果窗口能正常弹出说明包已经加载。如果 Package Manager 显示已安装但菜单里没有 Recorder常见原因是编辑器缓存未刷新。可以试试关闭项目重新打开或者在 Package Manager 中点击该包右侧的 Reimport 按钮。4. 使用 Recorder Window 录制 Game View 画面4.1 打开 Recorder Window在 Unity 菜单栏中执行 Window General Recorder Recorder Window。新版 Unity 中入口也可能是 Window Recorder具体以当前版本的菜单为准。打开后是一个可停靠的编辑器窗口左侧区域用于管理录制任务列表右侧用于配置选中任务的参数。4.2 新建视频录制任务在 Recorder Window 左上角点击 Add Recorder选择 Movie。之后会出现一个录制任务的参数面板。这一步的目的是告诉 Recorder输出是视频文件不是序列帧或 GIF。如果选择 Image Sequence则每帧会输出独立图片文件。对于普通内录需求Movie 是最直接的。4.3 配置录制源、分辨率与输出路径录制任务创建后重点配置以下几项Source选择 Game View。分辨率默认是 Game View 当前分辨率如果需要固定 1920x1080可以手动指定 Output Resolution。Output File设置输出路径和文件名。输出路径建议放在项目外或者项目内的Recordings目录。如果放在项目 Assets 下Unity 会把它当资源导入还容易误提交到版本控制。实际项目中更推荐使用带时间戳的文件名比如Record_20250101_123000.mp4避免每次录制覆盖之前的文件。4.4 帧率和编码器Recorder 允许设置输出帧率。如果只是给策划看流程30fps 足够如果需要展示战斗动作的流畅度可以设置 60fps。要注意如果游戏实际运行帧率只有 30强行设置 60fps 输出并不会让画面更流畅反而会让文件变大。编码器选择同样重要。在 Windows 上Movement 编码器通常可以输出 H.264 MP4如果发现录制出来的视频用常见播放器打不开优先换编码器或输出格式试试。4.5 开始录制与停止录制配置完成后点击 Start Recording 开始录制。录制过程中可以正常操作 Game 场景。需要注意Recorder 录制的是编辑器内的实时渲染如果编辑器最小化或被其它窗口遮挡帧率会产生明显波动。最稳妥的做法是录制时保持 Game View 处于可见状态并且不要拖动编辑器窗口。录制结束点击 Stop Recording文件会写入输出路径。4.6 画面录制的小坑Game View 录制最常遇到的问题有两个第一个是黑屏。如果 Recorder 选择了 Game View但 Game View 窗口没有被激活或场景没有正常渲染录制结果可能全黑。此时先确认 Game View 在编辑器中是可见的并且场景正常加载。第二个是分辨率不一致。Game View 的 Aspect 如果设置成 Free Aspect录制出来的尺寸可能和预期不符。建议在 Game View 顶部把分辨率切到固定比例或者在 Recorder 里手动指定输出宽高。5. 内录音频游戏音频、麦克风与系统声音5.1 先让游戏音频出现在 AudioListener 中要在录制的视频里有声音前提是场景中有一个可用的 AudioListener并且所有你希望录制的声音都最终汇入这个 Listener。Unity 新建场景时主摄像机默认带有 AudioListener。如果你在场景里手动创建过摄像机并删除了默认摄像机一定要确认至少有一个物体挂了 AudioListener。如果场景中存在多个 AudioListenerUnity 会在 Console 中警告录制音频也可能不稳定。游戏中的 AudioSource 播放声音时只要 AudioListener 能听到Recorder 就能录到。5.2 在 Recorder 中启用音频录制在 Movie 录制任务的参数面板中找到音频相关选项确保音频录制已开启并且来源设置为 AudioListener。不同版本的 Recorder 参数名称可能不同但核心思路一致开启音频输入来源选择 AudioListener。如果这一步没做视频画面是正常的但声音会完全丢失。5.3 把麦克风声音接入 AudioListener如果你希望在录制游戏画面的同时把你自己讲解的声音或环境声音录进去不能直接在 Recorder 里选麦克风设备。正确做法是把麦克风采集到的音频交给 AudioSource 播放让 AudioListener 听到它。下面是一段常见的麦克风接入脚本放在场景中的任意 GameObject 上即可using UnityEngine; public class MicInputToRecorder : MonoBehaviour { public AudioSource audioSource; public int sampleRate 44100; public int maxRecordTime 60; [ContextMenu(StartMic)] public void StartMic() { if (Microphone.devices.Length 0) { Debug.LogWarning(未检测到麦克风设备); return; } if (audioSource null) { audioSource gameObject.AddComponentAudioSource(); } string deviceName Microphone.devices[0]; AudioClip micClip Microphone.Start(deviceName, true, maxRecordTime, sampleRate); audioSource.clip micClip; audioSource.loop true; audioSource.Play(); } [ContextMenu(StopMic)] public void StopMic() { Microphone.End(null); audioSource.Stop(); } }这段脚本的思路是先通过Microphone.Start获取一个实时写入麦克风数据的 AudioClip再把这个 clip 挂到 AudioSource 上播放。AudioSource 播放的声音被 AudioListener 接收Recorder 在录制时就会把麦克风声音一并混入。脚本中的[ContextMenu]表示在 Inspector 中点击组件右上角三个点就能直接调用 StartMic 和 StopMic不用写 UI。在实际项目里如果麦克风声音有回声通常是因为扬声器外放导致的物理回声录制时建议戴上耳机。如果混音中有噪音可以在 AudioMixer 中加降噪处理因为 Recorder 录制的是 AudioListener 收到的最终混音结果。5.4 如果要录桌面系统声音这里必须说清楚Unity Recorder 本身不能直接录制“桌面系统声音”比如你在浏览器里打开的视频声音、播放器里的音乐、微信语音消息等。如果确实需要在 Unity 录制中混入这些信号常见做法是在 Windows 上使用虚拟声卡工具把系统播放设备设为虚拟输出。在 Unity 的麦克风设备中选择虚拟声卡对应的输入设备。通过 5.3 中的方式把该输入接入 AudioSource。这种做法的本质是把系统音频当作“麦克风输入”引入 Unity因此可以录制但它属于系统音频路由的调试方案。安装第三方虚拟声卡时需要关注来源和权限仅建议在开发测试环境使用。如果你的目标不是录 Unity 游戏画面而是单纯记录整个电脑桌面那用 OBS 这类外部视频录制工具更合适没有必要在 Unity 里绕一圈。5.5 音量与混音验证录制正式内容前建议先录 10 秒测试片段检查三个点游戏音乐是否清晰、麦克风声音是否过载、整体音量是否和画面匹配。一个隐藏问题开发机上如果系统音量很小AudioSource 的音量并不受影响但最终播放器的音量可能受系统控制。录制过程中尽量避免调整系统音量否则视频里的声音会断崖式变化。6. 用代码控制 Unity Recorder 录制6.1 为什么要用代码控制手动点击 Recorder Window 的 Start Recording 适合临时操作但如果你的项目需要反复录制或者在每次构建后自动生成演示视频就需要通过代码控制录制流程。Unity Recorder 提供了编辑器 API可以在脚本中创建录制任务、启动录制、停止录制。这是很多自动化工作流的基础。需要提醒的是Recorder 的编辑器 API 依赖UnityEditor命名空间只能在编辑器环境下运行不能作为发布给玩家的运行时录屏功能。如果你想做玩家端的内录功能需要评估平台原生能力或第三方录屏插件这属于另一个话题。6.2 RecorderController 基础示例下面是一个通过代码触发录制的示例脚本需要放在 Editor 文件夹下或者用#if UNITY_EDITOR包裹。#if UNITY_EDITOR using System; using UnityEditor.Recorder; using UnityEditor.Recorder.Input; using UnityEngine; public class CodeRecorderExample : MonoBehaviour { private RecorderController controller; [ContextMenu(Start Record)] public void StartRecord() { var settings ScriptableObject.CreateInstanceRecorderControllerSettings(); var movieRecorder ScriptableObject.CreateInstanceMovieRecorderSettings(); movieRecorder.name Code Recorder; movieRecorder.OutputFile Recordings/CodeRecord/Record_ DateTime.Now.ToString(yyyyMMdd_HHmmss); var gameViewInput new GameViewInputSettings(); gameViewInput.OutputWidth 1920; gameViewInput.OutputHeight 1080; movieRecorder.ImageInputSettings gameViewInput; // 音频输入的详细配置在不同 Recorder 版本中略有差异 // 核心思路是设置音频来源为 AudioListener并保留场景混音。 // movieRecorder.AudioInputSettings.PreserveAudio true; settings.RecorderSettings new RecorderSettings[] { movieRecorder }; controller new RecorderController(settings); controller.StartRecording(); Debug.Log(录制开始); } [ContextMenu(Stop Record)] public void StopRecord() { if (controller ! null controller.IsRecording()) { controller.StopRecording(); Debug.Log(录制结束请检查 OutputFile 输出路径); } } } #endif这段代码的核心逻辑是先创建 RecorderControllerSettings再创建 MovieRecorderSettings设置输出文件名和 Game View 输入源最后通过 RecorderController 启动录制。由于 Recorder 不同版本的 API 细节会调整上面代码中的属性名在实际项目中可能略有差异。关键是理解“Controller 负责启停Settings 负责参数”的结构这样版本升级后也能迅速定位修改位置。6.3 自动化场景与编辑器限制如果希望每次构建后自动录制一段画面可以把类似代码接入编辑器构建流程在构建完成后打开场景、启动 Play Mode、触发录制。但要注意编辑器自动化受限于场景加载时间、资源导入状态等因素建议先录最小场景验证稳定性。还有一个常见限制Unity 编辑器不在前台时实时渲染帧率可能被限制。自动化录制通常仍然需要编辑器处于运行状态。如果完全无人值守建议把游戏目标帧率调低并选择固定帧率输出避免视频时长和现实时间不一致。7. 运行结果与效果验证7.1 检查输出文件录制完成后先到 Recorder 的输出路径检查文件是否存在。如果配置的是Recordings/CodeRecord/Record_xxx.mp4可以去项目根目录的 Recordings 文件夹下查看。在命令行中也可以快速列出文件ls -lh Recordings/CodeRecord/正常应看到录制时间对应的视频文件。7.2 如何判断录制成功打开视频文件检查以下几个方面画面是否正常没有黑屏、花屏。画面比例是否和预期一致。播放时声音是否和画面同步。视频时长是否接近实际录制时长。如果这些都没问题说明本次内录成功。7.3 失败时优先检查什么如果录制失败按下面的顺序定位问题效率最高先看 Console 中有没有报错Recorder 的错误通常会在编辑器控制台输出。再看输出路径是否有写入权限路径不存在时 Recorder 可能直接失败。再确认播放器是否能打开该编码格式换 VLC 或系统自带播放器试一次。最后排查音频是否丢失重复检查音频选项和 AudioListener 状态。8. 常见问题与排查思路8.1 高频问题表问题现象可能原因排查方式解决方案菜单找不到 Recorder包未安装成功在 Package Manager 中搜索 Recorder安装后重启编辑器再检查菜单录制画面全黑Game View 未激活或相机 targetTexture 被占用确认 Game View 可见临时切换录制源到 Game View 或相机重新激活 Game View或换 Targeted Camera视频没有声音音频录制未开启或 AudioListener 被移除查看 Recorder 音频选项在场景中搜索 AudioListener开启音频录制选择 AudioListener 来源补上 Listener视频文件打不开编码器不兼容检查视频文件编码换播放器测试换 H.264 MP4 输出或调整编码器帧率不稳、视频卡顿编辑器渲染被其它任务占用或场景复杂度过高观察 Game 视图实时帧率关闭无关窗口降低输出分辨率简化场景麦克风有回音扬声器外放导致麦克风拾取到了音箱声音录制时使用耳机降低麦克风音量或在 AudioMixer 中处理代码脚本报错Recorder 版本 API 差异查看编译错误提示的具体类名按当前版本 API 调整代码或回退到文档示例8.2 排查优先级遇到问题先不要盲目改参数按照“环境是否正常、配置是否正确、输出是否能播放”的顺序排查。很多时候所谓的内录失败只是输出路径不可写或者播放器不支持编码。如果画面正常但没有声音第一反应应该是检查 AudioListener而不是检查音频文件。因为 Recorder 的音频捕获依赖它只要 AudioListener 听不到就一定录不进视频。9. 最佳实践、总结与后续方向9.1 录制前做最小验证无论你是用 Recorder Window 还是代码控制录制第一次配置完都先录 10 秒最小片段。这个片段可以是一个简单的立方体旋转不需要完整游戏场景。最小验证能提前暴露编码器、输出路径、音频来源问题避免正式录制时发现无法使用。9.2 输出文件管理建议统一输出到项目外的Recordings目录并且文件名带上日期和用途标记例如Recordings/20250101_BattleDemo.mp4 Recordings/20250101_BugReproduce_LoginCrash.mp4这样既不会污染 Assets 目录也方便团队回溯。9.3 音频处理的工程建议录制前在 AudioMixer 中为不同音效类型设置独立分组并确认 Master 音量没有被静音。不要在录制过程中静音主总线否则画面会正常但声音消失。如果麦克风声音和游戏声音混录建议先录一次试听确保你的讲解声音能盖过游戏音乐或者通过混音器把背景音乐适当调低。如果你要录制的音频包含音乐、第三方素材或他人语音请先确认授权避免把素材直接用于公开发布的视频。9.4 明确 Recorder 的边界Unity Recorder 是编辑器内的开发工具适合开发期、测试期、内容展示期的内录需求。它不适合替代玩家端的录屏功能也不适合录制桌面系统声音。如果你需要给最终用户提供“游戏内按快捷键录像”的功能应该关注平台原生录制 API或者使用专门的录屏插件并考虑性能开销、存储空间和用户授权问题。不要把 Recorder 的编辑器 API 打包进 Player它依赖 UnityEditor发布后会编译报错。9.5 总结与下一步回到本文最初的问题Unity 如何使用自带插件进行内录答案是用官方 Recorder 包。它能录 Game View 画面和游戏音频但不会录系统桌面音频。最核心的原理是 Recorder 从 AudioListener 取声音因此你想录什么声音就要先让这个声音进入 AudioListener麦克风要通过 AudioSource 接入系统声音要通过虚拟声卡或外部工具绕道。下一步建议按这个顺序实践先通过 Recorder Window 手动录制一次“游戏画面 游戏音频”确认输出文件正常。再通过代码示例把录制动作挂到快捷键上实现一键录制。最后按项目需求扩展录制指定相机、输出序列帧、接入 Timeline 流程。把这套流程跑通后你会发现日常的版本演示、Bug 反馈、素材输出都变得可控很多。建议收藏备用项目中真的需要录制时可以直接照做。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门