我试图通过脚本切片Sprite(类型转换为Texture2D)
项目在Android或IOS平台上运行时
可以通过脚本吗?
我尝试使用UnityEditor类,并且可以在计算机上使用
但是当我尝试构建Android或IOS时失败。
void OnPreprocessTexture()
{
TextureImporter textureImporter = (TextureImporter)assetImporter;
textureImporter.textureType = TextureImporterType.Sprite;
textureImporter.spriteImportMode = SpriteImportMode.Multiple;
textureImporter.mipmapEnabled = false;
textureImporter.filterMode = FilterMode.Point;
}
public void OnPostprocessTexture(Texture2D texture)
{
Debug.Log("Texture2D: (" + texture.width + "x" + texture.height + ")");
int spriteSize = 350;
int colCount = texture.width / spriteSize;
int rowCount = texture.height / spriteSize;
List<SpriteMetaData> metas = new List<SpriteMetaData>();
for (int r = 0; r < rowCount; ++r)
{
for (int c = 0; c < colCount; ++c)
{
SpriteMetaData meta = new SpriteMetaData();
meta.rect = new Rect(c * spriteSize, r * spriteSize, spriteSize, spriteSize);
meta.name = c + "-" + r;
metas.Add(meta);
}
}
TextureImporter textureImporter = (TextureImporter)assetImporter;
textureImporter.spritesheet = metas.ToArray();
}
public void OnPostprocessSprites(Texture2D texture, Sprite[] sprites)
{
Debug.Log("Sprites: " + sprites.Length);
}
在Android或IOS上运行项目时不起作用
[我想要什么]
程序
在Android或IOS平台上运行期间
1)从服务器(URL或文件)接收一些图像
2)在C#脚本上加载图片
3)将图像类型更改为“纹理”或“精灵” ...
4)切片图像(不要使用编辑器)
5)保存图像
6)使用一张图片
我想要的是脚本执行的所有过程
答案 0 :(得分:2)
TextureImporter
属于UnityEditor
命名空间,该命名空间在构建的应用程序中不存在,而仅在Unity Editor自身内部存在。 →您不能使用它!
您可以使用Sprite.Create
从给定的Texture2D
生成一个精灵。
如果实际上仅是要切除一部分纹理以将其用作精灵,则只需要在rect
参数中定义要从该图像中使用的那部分纹理即可。< / p>
// Wherever you get the texture from
Texture texture = ...;
// E.g. for using the center of the image
// but half of the size
var rect = new Rect(texture.width / 4, texture.height / 4, texture.width / 2, texture.height / 2);
// Create the sprite
var sprite = Sprite.Create(texture, text, Vector2.one * 0.5f);
其中rect
是
精灵在原始纹理上的位置,以像素为单位。
如果您还需要切片边界(通常在Unity中的Sprite Editor
中定义),则Sprite.Create
的重载额外需要一个border
参数,例如
var borders = new Vector4(2, 2, 2, 2);
var sprite = Sprite.Create(texture, rect, Vector2.one * 0.5f, 100, SpriteMeshType.FullRect, borders);
其中border
返回精灵的边框大小。
X =左,Y =下,Z =右,W =上
API没有说出来,但我想像rect
值一样,这些值也以像素为单位。
答案 1 :(得分:0)
我使用rect和Sprite Rnederer解决了 这是我的代码
void Start()
{
rect = new Rect(0f, 0f, 255, 255);
this.GetComponent<SpriteRenderer>().sprite = Sprite.Create(img, rect, new Vector2(0.5f, 0.5f));
this.GetComponent<RectTransform>().localScale = new Vector3(100, 100, 0);
StartCoroutine(Update());
}
/*
* rect = new Rect(i, 0, 255, 255);
this.GetComponent<SpriteRenderer>().sprite = Sprite.Create(img, rect, new Vector2(0.5f, 0.5f));*/
IEnumerator Update()
{
while (true)
{
if (i < 1000)
{
i += 255;
if (i > 770)
{
i = 0;
}
}
yield return new WaitForSeconds(0.25f);
rect = new Rect(i, 0f, 255, 255);
this.GetComponent<SpriteRenderer>().sprite = Sprite.Create(img, rect, new Vector2(0.5f, 0.5f));
}
}