こんな風にスライスされたスプライト(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);
■参考
- [Unity]ResourcesからスライスしたSpriteを取得する3つの方法
- http://tsubakit1.hateblo.jp/entry/20131222/1387654182