复制一个纹理为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

相关文章

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

使用FileChannel实现文件的复制和移动方式

《使用FileChannel实现文件的复制和移动方式》:本文主要介绍使用FileChannel实现文件的复制和移动方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录使用 FileChannel 实现文件复制代码解释使用 FileChannel 实现文件移动代码解释

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总