Texture」タグアーカイブ

Unityでスクリプトを使って複数枚のSpriteに分割する方法

UnityではSprite ModeをMultipleに設定することで、1枚の画像ファイルから複数枚のSpriteを作成する機能があります。ただ、これで作成したSpriteは基本的に全く別のSpriteとして扱われるので、スクリプトから操作したい時に少し不便なことがあります。

そこで、スクリプトで複数枚のSpriteに変換する方法はないかなと思って調べてみたところ、Sprite.Createを使って作成する方法が簡単かなという感じでした。

使い方

Texture2D texture;
for(...) {
  var rect = new Rect(x, y, width, height);
  Sprite.Create(texture, rect, new Vector2(0.5f, 0.5f), 100.0f);
}

Rectで指定した範囲のSpriteが作られるので、この値を変えていきながら分割していくという形です。

実行時に毎回Sprite.Createを実行することになるのでパフォーマンス的には不利になると思いますが、実用上は問題ないかなと思います。

リンク

Unity – Scripting API: Sprite.Create
https://docs.unity3d.com/ScriptReference/Sprite.Create.html

Unity – Manual: Sprite Editor
https://docs.unity3d.com/Manual/SpriteEditor.html

PNGファイルを読み込んでTextureとして使う方法

Textureとして使いたい場合

PNGファイルを読み込んでTextureとして使いたい場合は、LoadImageを使って次のような感じで実装できるみたいです。

string path = "texture.png";
byte[] bytes = File.ReadAllBytes(path);
Texture2D texture = new Texture2D(2, 2);
texture.LoadImage(bytes);

Texture2D(2, 2)としていますが、LoadImage実行後にサイズも更新されるそうなので特に気にする必要はなさそうです。

Spriteとして使いたい場合

Spriteとして使いたい場合は

Rect rect = new Rect(0f, 0f, texture.width, texture.height);
Sprite sprite = Sprite.Create(texture, rect, Vector2.zero);

として使えるそうです。

リンク

Unity – Scripting API: ImageConversion.LoadImage
https://docs.unity3d.com/ScriptReference/ImageConversion.LoadImage.html

Unity – Scripting API: Sprite.Create
https://docs.unity3d.com/ScriptReference/Sprite.Create.html

Unity – Scripting API: Windows.File.ReadAllBytes
https://docs.unity3d.com/ScriptReference/Windows.File.ReadAllBytes.html