首页 > 其他分享 >unity截屏(排除UI,按钮)

unity截屏(排除UI,按钮)

时间:2025-01-16 15:27:57浏览次数:3  
标签:Layer Screenshot Screen unity 截屏 UI 按钮

在Unity中实现截屏但不希望截到按钮,可以通过以下几种方法来实现:

方法一:使用特定相机进行截屏

Unity允许你使用特定的相机进行截屏,这样可以避免截取到不需要的UI元素,比如按钮。具体步骤如下:

  1. 创建一个新的相机:在Unity编辑器中,右键点击Hierarchy窗口,选择Create Empty,然后将其命名为ScreenshotCamera
  2. 设置相机的Culling Mask:选择ScreenshotCamera,在Inspector窗口中找到Culling Mask属性。取消勾选包含按钮的Layer,只保留需要截屏的Layer。
  3. 编写截屏脚本:使用RenderTexture来捕获特定相机的视图。
using UnityEngine;

public class Screenshot : MonoBehaviour
{
    public Camera screenshotCamera; // 将这个字段在Inspector中设置为ScreenshotCamera

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.S))
        {
            CaptureScreen(screenshotCamera);
        }
    }

    void CaptureScreen(Camera came)
    {
        RenderTexture rt = new RenderTexture(Screen.width, Screen.height, 0);
        came.targetTexture = rt;
        came.Render();
        RenderTexture.active = rt;
        Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
        screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        screenShot.Apply();
        came.targetTexture = null;
        RenderTexture.active = null;
        GameObject.Destroy(rt);
        byte[] bytes = screenShot.EncodeToPNG();
        string filename = Application.dataPath + "/Screenshot.png";
        System.IO.File.WriteAllBytes(filename, bytes);
    }
}

方法二:临时禁用按钮

在截屏前临时禁用按钮,截屏后再重新启用按钮。

using UnityEngine;
using UnityEngine.UI;

public class Screenshot : MonoBehaviour
{
    public Button buttonToHide; // 将这个字段在Inspector中设置为需要隐藏的按钮

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.S))
        {
            buttonToHide.gameObject.SetActive(false); // 隐藏按钮
            ScreenCapture.CaptureScreenshot("Screenshot.png");
            buttonToHide.gameObject.SetActive(true); // 显示按钮
        }
    }
}

方法三:使用Layer Mask

将按钮放在一个单独的Layer中,然后在截屏时排除该Layer。

  1. 创建新的Layer:在Unity编辑器中,点击Edit -> Project Settings -> Tags and Layers,创建一个新的Layer,例如UI_Hide
  2. 将按钮移动到新的Layer:选择按钮,在Inspector窗口中找到Layer属性,将其设置为UI_Hide
  3. 修改相机的Culling Mask:选择主相机,在Inspector窗口中找到Culling Mask属性,取消勾选UI_Hide Layer。
  4. 编写截屏脚本:使用ScreenCapture.CaptureScreenshot进行截屏。
using UnityEngine;

public class Screenshot : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.S))
        {
            ScreenCapture.CaptureScreenshot("Screenshot.png");
        }
    }
}

通过以上方法,你可以在Unity中实现截屏但不希望截到按钮的功能。选择适合你项目需求的方法进行实现即可。

标签:Layer,Screenshot,Screen,unity,截屏,UI,按钮
From: https://blog.csdn.net/Yangdongdong_135/article/details/145184074

相关文章

  • RevSuit:灵活而强大的反向连接平台
    免责声明本文旨在提供有关特定漏洞或安全工具的详细信息,以帮助安全研究人员、系统管理员和开发人员更好地理解和修复潜在的安全威胁,协助提高网络安全意识并推动技术进步,而非出于任何恶意目的。利用本文提到的漏洞信息或进行相关测试可能会违反法律法规或服务协议。作者不对读者......
  • 【C++】开源:ImGui图形用户界面库配置与使用
    项目介绍项目Github地址:https://github.com/ocornut/imguiDearImGui(ImGui)是一个开源的、用C++编写的图形用户界面(GUI)库。它由OCornut创建,旨在为应用程序和工具提供创建用户界面的简单高效的方式。以下是DearImGui的一些主要特性和特点:1.即时模式GUI:ImGui遵循即......
  • 【Eel库】用于制作类似 Electron 的离线 HTML/JS GUI 应用程序
    简介Eel是一个简单的Python库,用于制作类似Electron的离线HTML/JSGUI应用程序,并可以完全访问Python功能和库。Eel托管一个本地Web服务器,让您可以标注Python中的函数,以便从JavaScript调用它们,反之亦然。Eel旨在简化编写简短和简单的GUI应用程序的过......
  • nginxUI 安装及学习
    https://www.nginxwebui.cn/功能说明本项目可以使用WebUI配置nginx的各项功能,包括http协议转发,tcp协议转发,反向代理,负载均衡,ssl证书自动申请、续签、配置等,最终生成nginx.conf文件并覆盖nginx的默认配置文件,完成nginx的最终功能配置.本项目可管理多个nginx服务器......
  • 解决 spring boot 2.7.18 导入 flowable 6.8.1 报 Liquibase failed to start because
    解决springboot2.7.18导入flowable6.8.1报Liquibasefailedtostartbecausenochangelogcouldbefoundat'classpath:/db/changelog/db.changelog-master.yaml'.的办法 不论是导入<dependency><groupId>org.flowable</groupId><ar......
  • Stable Diffusion WebUI 最新版使用文档整理
    太久没用基本都忘光了,发现记的笔记也没有很好的梳理,虽然网上已经有了不少详细的文档了,但自己梳理一遍记忆比较深刻。本文转载自我的博客:https://blog.abyssdawn.com/archives/515.html已同步公众号环境准备$python--versionPython3.10.10$nvcc--versionnvcc:NVIDIA......
  • 费曼学习法解读:什么是UI
    UI呢,就像是一个房子的装修。 假如你有一个房子,UI就是把这个房子装修得漂漂亮亮、让人看着舒服又好用的东西。 比如说,你打开一个手机软件,那个软件的界面就是UI。界面上的各种图标啦、颜色啦、字体啦,这些组合在一起,让你一看就知道怎么用这个软件。 如果UI做得好,就像......
  • Unity中实现倒计时结束后干一些事情
    问题描述:如果我们想实现在一个倒计时结束后可以执行某个方法,比如挑战成功或者挑战失败,或者其他什么的比如生成boss之类的功能,而且你又不想每次都把代码复制一遍,那么就可以用下面这种方法。结构实现步骤创建一个这样的结构(一个图片CountdownManage,两个文本Tips,countdown) ......
  • 基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):  仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要       在现代社会的众多场景中,如银行、车站、餐厅等,排队人数的统计对于资源分配、服务优化以及人员管理等方面具有极为重......
  • Unity QFrameWork--Architecture
    ArchitectureArchitecture代码usingSystem;usingSystem.Collections.Generic;namespaceQFramework{publicinterfaceIArchitecture{///<summary>///注册系统///</summary>voidRegisterSystem<T>(T......