You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:33:10