Unity录屏场景:如何将主相机视图设置为UI特定区域
嘿,我之前也遇到过一模一样的问题!针对你这种用Screen Space - Camera Canvas、要让相机精准对准特定UI区域(还包含VideoPlayer子对象)的场景,给你几个亲测有效的方案:
方案1:分层隔离UI元素 + 相机Culling Mask
你之前用Culling Mask无效,大概率是没把目标UI区域单独拆分到专属Layer里。试试这个:
- 先在Unity的Layer面板新建一个专属Layer,比如命名为
RecordTargetUI - 找到包含VideoPlayer的那个UI父对象(比如一个Panel),把它和所有子对象(包括VideoPlayer)的Layer都改成
RecordTargetUI - 把其他不需要录屏的UI元素,Layer保持默认的
UI或者其他无关Layer - 创建一个专门的录屏相机(不用动MainCamera也可以),设置它的Culling Mask只勾选
RecordTargetUI - 调整这个相机的参数:因为是
Screen Space - Camera模式,相机的Z轴位置要和Canvas的Render Camera保持一致(确保UI能被正确渲染),然后调整相机的正交大小,刚好让目标UI区域填满相机视图——你可以手动拖,也可以用脚本计算正交大小适配UI尺寸。
方案2:用脚本动态设置相机视口(精准对准任意UI区域)
如果需要相机能灵活对准不同的UI区域,这个方法更实用:
- 创建一个Render Texture(分辨率和你要录的UI区域匹配),把它设为录屏相机的Target Texture
- 给录屏相机挂载下面的脚本,拖入你要对准的目标UI的
RectTransform:
using UnityEngine; using UnityEngine.UI; public class FocusSpecificUI : MonoBehaviour { [SerializeField] private RectTransform targetUI; private Camera _recordCamera; private void Awake() { _recordCamera = GetComponent<Camera>(); } private void Start() { UpdateCameraToTargetUI(); } // 可以在需要切换目标时调用这个方法 public void UpdateCameraToTargetUI() { if (targetUI == null || _recordCamera == null) return; // 获取UI的世界坐标四角 Vector3[] worldCorners = new Vector3[4]; targetUI.GetWorldCorners(worldCorners); // 转换为相机视口坐标(范围0-1) Vector2 viewportBottomLeft = _recordCamera.WorldToViewportPoint(worldCorners[0]); Vector2 viewportTopRight = _recordCamera.WorldToViewportPoint(worldCorners[2]); // 设置相机视口,只渲染目标UI区域 _recordCamera.rect = new Rect( viewportBottomLeft.x, viewportBottomLeft.y, viewportTopRight.x - viewportBottomLeft.x, viewportTopRight.y - viewportBottomLeft.y ); } }
- 运行后,相机会自动调整视口范围,只渲染你指定的UI区域,最后直接录制这个Render Texture的内容就行。
方案3:复制目标UI到独立Canvas
如果不想折腾Layer和脚本,这个方法更简单粗暴:
- 复制你要录屏的那个包含VideoPlayer的UI对象
- 创建一个新的Canvas,设置Render Mode为
Screen Space - Camera,指定录屏相机为它的Render Camera - 把复制好的UI对象放到这个新Canvas下,移除其他无关UI
- 调整录屏相机的位置和正交大小,让这个新Canvas的UI刚好填满相机视图——这样相机只会渲染这个独立Canvas里的内容,完全不会受到原Canvas其他UI的影响。
小提示
- 如果用MainCamera来录屏,记得在录屏开始前临时修改它的Culling Mask/Viewport Rect,录屏结束后再恢复原来的参数,避免影响正常游戏画面
- 对于
Screen Space - Camera模式,相机的正交大小直接决定UI的显示比例,你可以用脚本根据UI的长宽比动态计算合适的正交大小,保证UI不会被拉伸。
内容的提问来源于stack exchange,提问作者Malkijan
相关产品推荐
相关产品推荐

