我试着用脚本分割雪碧(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)利用图像
我想要的是所有的过程都是由脚本完成的
发布于 2019-04-18 05:26:25
TextureImporter
属于UnityEditor
名称空间,它不存在于构建的应用程序中,而仅存在于统一编辑器本身中。→你不能用这个!
您可以做的是使用Sprite.Create
从给定的Texture2D
生成一个sprite。
种植
如果实际上只需要将纹理的某个部分作为sprite使用,那么您只需要在rect
参数中定义要从该图像中使用的纹理部分。
// 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, rect, Vector2.one * 0.5f);
其中,rect
是
雪碧在原始纹理上的位置,以像素为单位。
切片
如果您还想要一个切片边框(通常是在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=left,Y=bottom,Z=right,W=top。
API没有这么说,但我想,像rect
值一样,这些值也是以像素为单位的。
https://stackoverflow.com/questions/55738954
复制相似问题