复制一个纹理为SpriteAtlas的Sprite的纹理,大小和原始相同

2024-03-30 16:08

本文主要是介绍复制一个纹理为SpriteAtlas的Sprite的纹理,大小和原始相同,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

复制一个纹理为SpriteAtlas的Sprite的纹理,大小和原始相同

之前没做过关于texture的东西。

在打包的资源中有一个预设所有的图是打包在一起的。很多Sprite组成的图形。

在游戏加载后,需要对一些图层做处理,这时候需要处理贴图,但是又不想动原始的图。
复制Sprite里的贴图遇到很多问题。

Sprite.rect 大小可能比 Sprite.textureRect大得多,有时又有textureRectOffset,开始new的图形只是textureRect,发现比原始图像小,圆心在中心位置,所以出现了错位。

又想改坐标,但是发现别的地方有问题,最好不要动位置。

还是复制一个一模一样大小的纹理好一些。

很多问题找了文档,也没看懂

关于Sprite.textureRect的
https://docs.unity3d.com/ScriptReference/Sprite-textureRect.html

Sprite.textureRect
Leave feedback
public Rect textureRect;
Description
Get the rectangle this sprite uses on its texture. Raises an exception if this sprite is tightly packed in an atlas.

关于textureRectOffset的
https://docs.unity3d.com/ScriptReference/Sprite-textureRectOffset.html

Sprite.textureRectOffset
Leave feedback
public Vector2 textureRectOffset;
Description
Gets the offset of the rectangle this sprite uses on its texture to the original sprite bounds. If sprite mesh type is FullRect, offset is zero.

关于SetPixels的
https://docs.unity3d.com/ScriptReference/Texture2D.SetPixels.html

public void SetPixels(int x, int y, int blockWidth, int blockHeight, Color[] colors, int miplevel = 0);
Description
Set a block of pixel colors.

This function is an extended version of SetPixels above; it does not
modify the whole mip level but modifies only blockWidth by blockHeight
region starting at x,y. The colors array must be
blockWidth*blockHeight size, and the modified block must fit into the
used mip level.

这能看懂?反正我没看懂!! 也没搜到相关问题~~

自己研究丰衣足食吧~

贴上来做一个记录。

//复制一个纹理为SpriteAtlas的Sprite的纹理,大小和原始相同。static Color ConstClearColor = Color.clear;/// <summary>/// /// </summary>/// <param name="sp">sp是当前的Sprite</param>/// <returns></returns>public static Texture2D CopyTextureFrom(Sprite sp){//这里是rect的大小,可能比textureRect的大小更大一些.Texture2D texture = new Texture2D((int)sp.rect.width, (int)sp.rect.height);//这里是因为texture默认不是透明的,灰色的,这里给他一个透明填充。//有其他更加效率高的写法再替换掉.Color[] xxx = new Color[texture.width* texture.height];for (int i = 0; i < xxx.Length; i++){xxx[i] = ConstClearColor;}texture.SetPixels(xxx);//这里是获取到对应在Atlas里的纹理.Color[] pixelBuffer = sp.texture.GetPixels((int)sp.textureRect.x, (int)sp.textureRect.y, (int)sp.textureRect.width, (int)sp.textureRect.height);//这个blockWidth和Height的用法是自己猜的,没找到相关的帖子,官网文档写的也含糊不是很懂.//自己猜测就是在这个位置填充这个大小的纹理texture.SetPixels((int)sp.textureRectOffset.x, (int)sp.textureRectOffset.y, (int)sp.textureRect.width, (int)sp.textureRect.height, pixelBuffer, 0);texture.Apply();return texture;}

调用:

nowSpriteRenderer1 = nowTrans1.GetComponent<SpriteRenderer>();Sprite sp = nowSpriteRenderer1.sprite;// NowSpriteAtlas.GetSprite(nowTrans1.name);Texture2D txt = CDrawTexture.CopyTextureFrom(sp);sp = Sprite.Create(txt, new Rect(0,0,txt.width,txt.height), new Vector2(0.5f, 0.5f)); //nowSpriteRenderer1.sprite = sp;

有纰漏欢迎留言

这篇关于复制一个纹理为SpriteAtlas的Sprite的纹理,大小和原始相同的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/861942

相关文章

spoj705( 求不相同的子串个数)

题意:求串s的不同子串的个数 解题思路:任何子串都是某个后缀的前缀,对n个后缀排序,求某个后缀的前缀的个数,减去height[i](第i个后缀与第i-1 个后缀有相同的height[i]个前缀)。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstrin

禁止复制的网页怎么复制

禁止复制的网页怎么复制 文章目录 禁止复制的网页怎么复制前言准备工作操作步骤一、在浏览器菜单中找到“开发者工具”二、点击“检查元素(inspect element)”按钮三、在网页中选取需要的片段,锁定对应的元素四、复制被选中的元素五、粘贴到记事本,以`.html`为后缀命名六、打开`xxx.html`,优雅地复制 前言 在浏览网页的时候,有的网页内容无法复制。比如「360

PDFQFZ高效定制:印章位置、大小随心所欲

前言 在科技编织的快节奏时代,我们不仅追求速度,更追求质量,让每一分努力都转化为生活的甜蜜果实——正是在这样的背景下,一款名为PDFQFZ-PDF的实用软件应运而生,它以其独特的功能和高效的处理能力,在PDF文档处理领域脱颖而出。 它的开发,源自于对现代办公效率提升的迫切需求。在数字化办公日益普及的今天,PDF作为一种跨平台、不易被篡改的文档格式,被广泛应用于合同签署、报告提交、证书打印等各个

【CSS in Depth 2 精译_024】4.2 弹性子元素的大小

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

Linux下获取硬盘空间的大小

1. df 命令查看所有硬盘设备的信息 2. 查看指定路径的磁盘空间大小 代码获取空间大小案例:

Windows11电脑上自带的画图软件修改照片大小(不裁剪尺寸的情况下)

针对一张图片,有时候上传的图片有大小限制,那么在这种情况下如何修改其大小呢,在不裁剪尺寸的情况下 步骤如下: 1.选定一张图片,右击->打开方式->画图,如下: 第二步:打开图片后,我们可以看到图片的大小为82.1kb,点击上面工具栏的“重设大小和倾斜”进行调整,如下: 第三步:修改水平和垂直的数字,此处我修改为分别都修改为50,然后保存,可以看到大小变成63.5kb,如下:

opengl纹理操作

我们在前一课中,学习了简单的像素操作,这意味着我们可以使用各种各样的BMP文件来丰富程序的显示效果,于是我们的OpenGL图形程序也不再像以前总是只显示几个多边形那样单调了。——但是这还不够。虽然我们可以将像素数据按照矩形进行缩小和放大,但是还不足以满足我们的要求。例如要将一幅世界地图绘制到一个球体表面,只使用glPixelZoom这样的函数来进行缩放显然是不够的。OpenGL纹理映射功能支持将

如何根据相同分隔符提取间隔数据?

最近遇到很多提问怎么提取字符的,而这些问题都有一个相同的特征,就是要提取的内容与内容之间,都有着相同的分隔符。当然,这种问题直接用“数据” →  “分列”功能就可以一步到位实现的,但有人喜欢折腾,而更多的人又非得指定函数公式的方法,或者更多的是要保持数据的同步性。   下面,我们就来讲讲用函数公式应该怎么实现这个提取,首先来个数据和要求,如下图,将 - 号间隔的内容依次提取到右边单元格内:

eclipse中相同变量显示变色设置

java文件的设置"Window"-"preferences"-"Java"-"Editor"-"Mark Occurrences"复选框勾选 js文件的设  置"Window"-"preferences"-"web"-"javascript"-"Mark Occurrences"复选框勾选 。

MyBatis学习——解决字段名与实体类属性名不相同的冲突

转载地址:http://www.cnblogs.com/xdp-gacl/p/4264425.html