Unity截图功能并使用UI显示

本文介绍了一个使用Unity实现房间装修前后效果对比的项目,通过按P键截图并显示在全屏Image组件上。代码示例展示了如何在Update()中监听按键,然后使用ReadPixels()进行截图,并将Texture2D转换为Sprite显示。若需保存截图,可使用文件流操作将纹理编码为PNG并写入文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在做一个房间装修项目,有一个功能需要对比装修前后的效果,经过考虑决定使用截图功能制作。
代码:

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

public class ScreenShot : MonoBehaviour
{
    public Image img; //显示的UI
    private Texture2D texture;
    private int w;
    private int h;
    void Start()
    {
    	//获取屏幕尺寸
        w = Screen.width;
        h = Screen.height;
        texture= new Texture2D(w, h);
    }
    void Update()
    {
	    //按P截图,测试用
        if (Input.GetKeyDown(KeyCode.P))
        {
            StartCoroutine(SaveImage());
        }
    }

    IEnumerator SaveImage()
    {
        yield return new WaitForEndOfFrame();
        Rect rect = new Rect(0, 0, w, h);
        texture.ReadPixels(rect, 0, 0, true); //截图
        texture.Apply();
        Sprite sp = Sprite.Create(texture, rect, Vector2.zero); //Texture2D转换为Sprite
        img.sprite = sp;
        Debug.Log("write a pic");
        yield return null;
    }
}

效果

在这里插入图片描述
在这里插入图片描述

备注

需求是截全屏,使用的Image布局拉满全屏。注意截图时要屏蔽UI。(具体根据需求)
这里是缓存到内存中,如果需要保存可以使用文件流操作。

        byte[] bytes = texture.EncodeToPNG();
        File.WriteAllBytes(Application.streamingAssetsPath + "/" + "name" + ".png", bytes);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我寄人间雪满头丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值