我试图通过脚本切片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)使用图像片
我想要的是脚本所有的程序
TextureImporter
属于UnityEditor
命名空间,该命名空间在构建的应用程序中不存在,但仅在Unity编辑器本身内。 &右箭头;你不能用这个!
你可以做的是使用Sprite.Create
从给定的Texture2D
生成一个精灵。
如果它实际上只是关于剪切纹理的某个部分以将其用作精灵,那么您只需要在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, text, Vector2.one * 0.5f);
其中rect
是
Sprite在原始纹理上的位置,以像素为单位指定。
如果你还想要一个切片边界(你通常在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
值这些值也是以像素为单位。
我解决了使用react和Sprite Renderer这里是我的代码
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));
}
}