Unity 多图片(带透明通道)合成

news/2025/2/20 14:06:16

取个巧,利用Camera和Render Texture
在这里插入图片描述
多个2d图片组合成型
在这里插入图片描述
每个Square都单独设置一个层级
在这里插入图片描述
相机设置
在这里插入图片描述
RenderTexture设置,然后将RenderTexture放在一个RawImage上

以下是生成图片的代码


using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
public class test2 : MonoBehaviour
{
    public RawImage rawImage;
    public RawImage rawImage2;
    void Start()
    {
        AAAAAA();
    }
    [ContextMenu("合成图片")]
    void AAAAAA()
    {
        Texture2D texture2D = TextureToTexture2D(rawImage2.texture);
        rawImage.texture = texture2D;
        rawImage.SetNativeSize();
        SavePicture(texture2D);

    }
    private Texture2D TextureToTexture2D(Texture texture)
    {
        Texture2D texture2D = new Texture2D(texture.width, texture.height, TextureFormat.RGBA32, false);
        RenderTexture currentRT = RenderTexture.active;
        RenderTexture renderTexture = RenderTexture.GetTemporary(texture.width, texture.height, 32);
        Graphics.Blit(texture, renderTexture);

        RenderTexture.active = renderTexture;
        texture2D.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
        texture2D.Apply();

        RenderTexture.active = currentRT;
        RenderTexture.ReleaseTemporary(renderTexture);

        return texture2D;
    }
    private void SavePicture(Texture2D texture2D)
    {
        byte[] bytes = texture2D.EncodeToPNG();//然后将这些纹理数据,成一个png图片文件

        string filename = Application.dataPath + "/" + GetDateName() + ".png";

        FileInfo[] fileInfos = new DirectoryInfo(QuickConfig.instance._照片保存路径).GetFiles();
        for (int i = 0; i < fileInfos.Length; i++)
        {
            File.Delete(fileInfos[i].FullName);
        }
        System.IO.File.WriteAllBytes(filename, bytes);

        Debug.Log(string.Format("截屏了一张图片: {0}", filename, bytes));
    }
    /// <summary>
    /// 获取以日期命名的名称
    /// </summary>
    /// <returns>日期命名</returns>
    public static string GetDateName()
    {
        int hour = DateTime.Now.Hour;
        int minute = DateTime.Now.Minute;
        int second = DateTime.Now.Second;
        int year = DateTime.Now.Year;
        int month = DateTime.Now.Month;
        int day = DateTime.Now.Day;
        return string.Format("{0:D4}{1:D2}{2:D2}{3:D2}{4:D2}{5:D2}", year, month, day, hour, minute, second);
    }
}

在这里插入图片描述
左为相机看到的图,右为生成的图


http://www.niftyadmin.cn/n/5139592.html

相关文章

3. 一文快速学懂常用工具——Git(下)

本章讲解知识点 Git 开始入门Git 指令学习节点合并的原理git 常用操作实例本专栏适合于软件开发刚入职的学生或人士,有一定的编程基础,帮助大家快速掌握工作中必会的工具和指令。本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。如专栏内容有错漏,欢迎在评论区指出…

Kafka - 3.x 消费者 生产经验不完全指北

文章目录 生产经验之Consumer事务生产经验—数据积压&#xff08;消费者如何提高吞吐量&#xff09; 生产经验之Consumer事务 Kafka引入了消费者事务&#xff08;Consumer Transactions&#xff09;来确保在消息处理期间维护端到端的数据一致性。这使得消费者能够以事务的方式…

centos系统源码编译安装nginx,并编写服务脚本

1.安装编译所需的依赖项&#xff1a; yum install -y gcc pcre-devel openssl-devel zlib-devel2.下载 Nginx 源代码&#xff1a; wget http://nginx.org/download/nginx-1.21.3.tar.gz tar -xf nginx-1.21.3.tar.gz cd nginx-1.21.33.配置编译选项并进行编译和安装&#xff…

STM32-RTC实时时钟

RTC实时时钟 STM32的RTC外设&#xff0c;实质上是一个掉电后还继续运行的定时器。类似于通用定时器TIM外设&#xff0c;可以计时和触发中断。 掉电指的是电源VDD断开时为了RTC外设掉电继续运行&#xff0c;必须接上锂电池给STM32的RTC、备份发卡通过Vbat引脚供电。当主电源VDD有…

OpenCV 笔记(4):图像的算术运算、逻辑运算

Part11. 图像的算术运算 图像的本质是一个矩阵&#xff0c;所以可以对它进行一些常见的算术运算&#xff0c;例如加、减、乘、除、平方根、对数、绝对值等等。除此之外&#xff0c;还可以对图像进行逻辑运算和几何变换。 我们先从简单的图像加、减、逻辑运算开始介绍。后续会有…

深入了解 RocketMQ:高性能消息中间件

二、RocketMQ基本概念 2.1 消息模型&#xff08;Message Model&#xff09; RocketMQ主要由Producer、Broker、Consumer三部分组成&#xff0c;其中Producer负责生产消息&#xff0c;Consumer负责消费消息&#xff0c;Broker负责存储消息。Broker在实际部署过程中对应一台服务…

精品基于Python的个性化电影推荐系统

《[含文档PPT源码等]精品基于Python的个性化电影推荐系统设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技…

【前端早早聊直播回顾】Harmony Next 与 Flutter 的不解之缘

Hello 大家好&#xff0c;我是 Flutter GDE 郭树煜&#xff0c;本次要分享的话题是关于鸿蒙与 Flutter 的故事&#xff0c;可能没接触过的会感觉有点懵&#xff0c;Harmony 和 Flutter 有啥关系&#xff0c;它们怎么会被放到一起讲了呢&#xff1f;接下来就让我们来聊聊这个问题…