動的にロードされるスプライトは、マルチ モードの小さな画像です (つまり、スプライトには多数の小さな画像が含まれています)。

Unity では、Resources.Load()メソッドを使用してリソースをロードできます。スプライトで複数モードで画像をロードしたい場合は、これらの画像のパスを知っておく必要があります。

まず、ロードするリソースを「Resources」というフォルダーに配置する必要があります。次に、次のコードを使用して複数のスプライトをロードできます。

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

"YourPath/YourImageName"実際の画像リソースのパスと名前に置き換えることに注意してください。

ただし、このスプライトがマルチ モードである場合 (つまり、スプライトに小さな画像が多数含まれている場合)、上記のコードはニーズを満たすことができません。小さな写真をすべて取り込む必要があるからです。

この場合、次の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);
}

上記のコードは、スプライト配列内の各スプライトを反復処理し、各スプライトを .png 形式の画像ファイルとして保存します。

ご注意ください:

  1. 宛先パスが書き込み可能であることを確認する必要があります。
  2. 実行環境に書き込み権限がない場合やディスク容量が不足している場合は、画像が正常に保存されない場合があります。
  3. このコードはディスク ファイルに対して直接動作するため、エディタ モードでのみ使用してください。実行時に画像を動的に保存およびロードする場合は、Application.persistentDataPath などの他のメソッドの使用を検討してください。

おすすめ

転載: blog.csdn.net/hhh314159/article/details/133862341