动态加载sprite是multiple模式(即该sprite包含了很多小图)里的小图

在Unity中,Resources.Load()方法可以用来加载资源。如果要加载Sprite下的multiple模式的图片,你需要知道这些图片的路径。

首先,你需要把你想要加载的资源放在一个名为"Resources"的文件夹内。然后,你可以使用以下代码来加载多个Sprite:

// 加载一个包含多张Sprite图片的资源
Sprite spriteObj = Resources.Load<Sprite>("YourPath/YourImageName");

请注意将 "YourPath/YourImageName" 替换为实际图像资源路径和名称。

但是如果这个sprite是multiple模式(即该sprite包含了很多小图),那么上述代码就不能满足需求了。因为我们需要得到其中每一张小图。

对于这种情况,我们可以使用 Resources.LoadAll() 方法:

// 加载所有Sprites(注意路径和名称)
Sprite[] sprites = Resources.LoadAll<Sprite>("YourPath/YourImageName");

foreach(Sprite s in sprites)
{
    
    
    // 打印出所有sprites名字或者进行其他操作
    Debug.Log(s.name);
}

以上代码会返回一个 Sprites 数组,其中包含了所指定路径下所有 Sprites 对象。

把小图取出来,存成一张张单图

在Unity中,你可以通过Texture2D的EncodeToPNG()函数将Sprite或Texture2D保存为PNG图片。以下是一个例子:

// 加载所有Sprites(注意路径和名称)
Sprite[] sprites = Resources.LoadAll<Sprite>("YourPath/YourImageName");

foreach(Sprite s in sprites)
{
    
    
    // 打印出所有sprites名字或者进行其他操作
    Debug.Log(s.name);

    // 创建一个新的Texture2D,其大小与Sprite相同
    Texture2D tex = new Texture2D((int)s.rect.width, (int)s.rect.height);
    
    // 将Sprite的像素信息复制到Texture2D上
    tex.SetPixels(s.texture.GetPixels((int)s.rect.xMin, (int)s.rect.yMin, 
                                      (int)s.rect.width, (int)s.rect.height));
    
    // 应用更改
    tex.Apply();

	// 转换为 .png 格式图片文件数据流 
	byte[] bytes = tex.EncodeToPNG();
	
	// 定义存储路径,这里将图片存储在项目Assets目录下,并以sprite的名称命名。
	string path = Application.dataPath + "/"+s.name+".png";
	
	// 写入文件  
	System.IO.File.WriteAllBytes(path , bytes);
}

以上代码会遍历sprites数组中的每个sprite,并将每个sprite保存为.png格式的图像文件。

请注意:

  1. 你需要确保目标路径是可写入的。
  2. 如果运行环境没有写权限或者磁盘空间不足,则可能无法成功保存图像。
  3. 这段代码应该只在Editor模式下使用,因为它直接操作了磁盘文件。如果想要在运行时动态地保存和加载图像,请考虑使用其他方法如Application.persistentDataPath等。

猜你喜欢

转载自blog.csdn.net/hhh314159/article/details/133862341