一个脚本实现实时小窗口功能

文章介绍了如何在Unity中通过每帧生成截图并赋值给Image组件来实现实时窗口效果。作者创建了一个ScreenShot类,利用RenderTexture和Camera进行截图,然后将截图转换为Sprite显示在Image上。通过添加if判断,可以控制特定时刻抓取屏幕快照。
摘要由CSDN通过智能技术生成

        有时候我就在想,之前的实时小窗口都是通过摄像机来实现的,而unity自带截图功能,为什么我不能每帧生成一个截图然后调用他,把他赋值给image,然后就可以在场景上实现实时窗口的功能,同时我也可以加一条if判断来停止他,从而获得某一时刻的截图。

        说干就干,代码内容很简单:

using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class ScreenShot : MonoBehaviour
{
    public Image image;
    public Camera screenshotCamera; // 用于截图的摄像机

    private void Update()
    {
        // if (Input.GetMouseButtonDown(0))
        // {
        StartCoroutine(ScreenShot_ScreenCapture());
        // }
    }

    private IEnumerator ScreenShot_ScreenCapture()
    {
        // 禁用Image组件
        image.enabled = false;

        // 创建RenderTexture来渲染截图
        RenderTexture renderTexture = new RenderTexture(Screen.width, Screen.height, 24);
        screenshotCamera.targetTexture = renderTexture;
        screenshotCamera.Render();

        // 保存RenderTexture为截图
        RenderTexture.active = renderTexture;
        Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
        texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        texture.Apply();
        byte[] bytes = texture.EncodeToPNG();
        string screenshotPath = "D:/jietu.png";
        System.IO.File.WriteAllBytes(screenshotPath, bytes);

        // 恢复Image组件状态
        image.enabled = true;

        // 释放渲染相关资源
        RenderTexture.active = null;
        screenshotCamera.targetTexture = null;
        renderTexture.Release();

        // 加载截图并将其转换为Sprite
        Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);

        // 将Sprite赋值给Image组件
        image.sprite = sprite;
        yield return null;
    }
}

        写好代码后,只需要把代码挂载到一个空物体上,然后把image和摄像机赋值就会得到效果

        运行结果如下:

         当然,我们只需要在update中添加if条件便可以实现自己想要的效果,是不是非常简单。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Js_x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值