【Unity2D】Multiple Spriteを動的に変更する方法

More than 1 year has passed since last update.

Main_unity_-_stg001_-_Web_Player.png

こんな風にスライスされたスプライト(enemy_0〜enemy_8)を動的に変更する方法を紹介します。


■まずはSpriteの取得

Spriteを名前指定で取得するには以下のように記述します。

  // スプライトの取得

// @param fileName ファイル名
// @param spriteName スプライト名
public Sprite GetSprite(string fileName, string spriteName) {
Sprite[] sprites = Resources.LoadAll<Sprite>(fileName);
return System.Array.Find<Sprite>(sprites, (sprite) => sprite.name.Equals(spriteName));
}

この関数には第1引数にファイル名を指定し、第2引数にスプライト名を指定します。今回のプロジェクトであれば、

* ファイル名(fileName):"Sprites/all"

* スプライト名(spriteName):"enemy_0" 〜 "enemy_8"

となります。

なお、 スプライトは「Resources」フォルダの下に配置 する必要があります。そうしないとResources.LoadAll()で参照することができません。


■Spriteの変更

Spriteの変更は以下のように記述します。

  // "enemy_0" 〜 "enemy_8" の文字列をランダムで生成

string name = "enemy_" + Random.Range(0, 8);
// Spriteを取得
Sprite sp = GetSprite("Sprites/all", name);
// SpriteRendererを取得する
SpriteRenderer sr = GetComponent<SpriteRenderer>();
// Spriteを変更する
sr.sprite = sp;

先ほどの関数でSpriteを取得し、GetComponent()で取得したSpriteRendererのプロパティの"sprite"にSpriteを代入することでスプライトを差し替えることができます。


■Single Spriteの場合

Single Spriteの場合は、Resources.Load() でそのままスプライトを取得できます。

Sprite sp = Resources.Load<Sprite>(fileName);


■参考