[Unity基础]RenderTexture
参考链接:
https://www.cnblogs.com/Jimm/p/5951362.html
一.相关API
1.Texture2D.ReadPixels
从RenderTexture.active中复制像素,以左下角为原点。
2.MonoBehaviour.OnPostRender
当相机渲染完所有物体就会调用该方法,并且只有当这个脚本挂在相机时才会调用。
二.测试
新建一个场景,新建一个camera和一个go,把go设置为一个单独的层,让camera单独照这个层,主camera不要照这个层。调整camera的深度和targetTexture。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.IO; public class TestRenderTexture : MonoBehaviour { public Camera camera;
public RawImage rawImage;
bool isScreenShot = false; void Update()
{
//将镜头的画面保存到本地
if (Input.GetKeyDown(KeyCode.Q))
{
Texture2D tex = RenderTexture2Texture2D(camera.targetTexture); //展示
rawImage.texture = tex; //保存到本地
byte[] bytes = tex.EncodeToPNG();
File.WriteAllBytes(Application.dataPath + "/RenderTexture/Test.png", bytes);
UnityEditor.AssetDatabase.Refresh();
} //屏幕截图(方法1)
if (Input.GetKeyDown(KeyCode.W))
{
StartCoroutine(ScreenShotIEnumerator());
} //屏幕截图(方法2)
if (Input.GetKeyDown(KeyCode.E))
{
isScreenShot = true;
}
} public IEnumerator ScreenShotIEnumerator()
{
yield return new WaitForEndOfFrame();
rawImage.texture = ScreenShot();
} private void OnPostRender()
{
//Debug.Log("OnPostRender");
if (isScreenShot)
{
isScreenShot = false;
rawImage.texture = ScreenShot();
}
} //屏幕截图
public Texture2D ScreenShot()
{
Texture2D tex = new Texture2D(Screen.width, Screen.height, TextureFormat.ARGB32, false);
tex.ReadPixels(new Rect(, , Screen.width, Screen.height), , );
tex.Apply();
return tex;
} //RenderTexture转Texture2D
public Texture2D RenderTexture2Texture2D(RenderTexture rt)
{
RenderTexture preRT = RenderTexture.active;
RenderTexture.active = rt;
Texture2D tex = new Texture2D(rt.width, rt.height, TextureFormat.ARGB32, false);
tex.ReadPixels(new Rect(, , rt.width, rt.height), , );
tex.Apply();
RenderTexture.active = preRT;
return tex;
}
}
[Unity基础]RenderTexture的更多相关文章
- Unity基础6 Shadow Map 阴影实现
这篇实现来的有点墨迹,前前后后折腾零碎的时间折腾了半个月才才实现一个基本的shadow map流程,只能说是对原理理解更深刻一些,但离实际应用估计还需要做很多优化.这篇文章大致分析下shadow ma ...
- unity 基础之InputManager
unity 基础之InputManager 说一下unity中的InputManager,先截个图 其中Axes指的是有几个轴向!Size指的是有几个轴,改变Size可以添加或者减少轴! Name指 ...
- unity 基础学习 transform
unity 基础学习 transform 1.unity采用的是右手坐标系,X轴右手为+,Y轴向上为+,Z轴朝里为+; 但是我们从3D MAX中导入模型之后,发现轴向并没有遵从这个原理, 其实是 ...
- Unity 基础
Unity 基础是unity入门的关键.他将讲解Unity的界面, 菜单项,使用资源,创设场景,并发布版本. 当你读完这段,你将理解unity是怎么工作的,如何有效地使用它,并且完成一个基本的游戏. ...
- NET笔记——IOC详解和Unity基础使用介绍
说起IOC,可能很多初学者不知道是用来做什么的,今天正好有点时间,就来扫扫盲,顺便巩固下自己. IOC全称是Inversion Of Control,意为控制反转(这些自然百度也有),可什么是控制反转 ...
- IOC详解和Unity基础使用介绍
说起IOC,可能很多初学者不知道是用来做什么的,今天正好有点时间,就来扫扫盲,顺便巩固下自己. IOC全称是Inversion Of Control,意为控制反转(这些自然百度也有),可什么是控制反转 ...
- unity基础命令
获取所挂脚本元素的组件: rd = GetComponent<Rigidbody>(); 获取其他元素的组件: rd = GameObject.Find("Player" ...
- 【Unity Shader学习笔记】Unity基础纹理-法线贴图
1 高度纹理 使用一张纹理改变物体表面法线,为模型提供更多细节. 有两种主要方法: 1.高度映射:使用一张高度纹理(height map)来模拟表面位移(displacement).得到一个修改后的法 ...
- Unity基础知识学习笔记二
1,object Instantiate(object original,Vector3 position,Quaternion rotation) 克隆原始物体,并返回克隆物体. ...
随机推荐
- ionic platform add ios, Error:spawn EACCES
RT: cordova ionic 环境搭建好之后,需要添加平台才能打包,添加平台如果出错:Error:spawn EACCES, 原因是因为没添加hooks, 请使用 ionic add hooks ...
- MySQL测试报告
硬件配置: 3台服务器:192.168.23.168, 192.168.23.169, 192.168.23.170 硬盘:230G 内存:16G Linux内核:Linux geoserver. ...
- NDK学习笔记(Add.cpp注释)(一)
// Add.C // Copyright (c) 2009 The Foundry Visionmongers Ltd. All Rights Reserved. static const char ...
- 【巷子】---flux---【react】
一.什么是Flux Flux 是一种架构思想,专门解决软件的结构问题.它跟MVC 架构是同一类东西,但是更加简单和清晰. 二.flux的基本概念 (1) .Flux由4部分组成 1.View:视图层 ...
- 开IE时 暴卡
待打开IE后,在“工具”-“管理加载项”中禁用所有加载项.
- CheckFail设计很垃圾
function checkFail(node, onError, fuckIE) { var id = node.src;//检测是否死链 node.onlo ...
- git 日常
git 恢复到上一个版本比如执行 git commit 命令之后 做了一些修改 恢复到上一个版本 1.修改一个文件想回到修改前 直接 git checkout -- filename 2.修改过文件, ...
- CreateUserWizard控件的使用
“CreateUserWizard”控件用于收集潜在用户所提供的信息.默认情况下,“CreateUserWizard”控件会将新用户添加到 ASP.NET 成员身份系统中.有关 ASP.NET 成员资 ...
- elasticsearch 口水篇(6) Mapping 定义索引
前面我们感觉ES就想是一个nosql数据库,支持Free Schema. 接触过Lucene.solr的同学这时可能会思考一个问题——怎么定义document中的field?store.index.a ...
- 【Spring学习笔记-2.1】Spring的设值注入和构造注入
设值注入: 先通过无参数的构造函数创建一个Bean实例,然后调用对应的setter方法注入依赖关系: 配置文件: <?xml version="1.0" encoding=& ...