The jonki

呼ばれて飛び出てじょじょじょじょーんき

[Unity] [NGUI] 特定のフォルダに含まれる画像からUI Spriteを作成するスクリプト

NGUI使い始めました。Assets下の特定のフォルダに入った画像を全部読み込んで、UI Spriteを作成してみました。nullチェックとかしてなくてサーセン

手順はこんな感じでいけた。

  1. 特定のフォルダに入った画像をAtlas化
  2. パスからそのパスに含まれるファイル一覧を取得
  3. 拡張子を除いた名前をspriteNameにセット

NGUIセットアップ

NGUIのページからどうぞ。下の方にFree Edition of NGUIとか書いてあるのでそこからダウンロードしてImportしてください。

まったく使ったことない人は、ここで一旦基本を覚えてください。UI Panelができた状態から次に進みます。
NGUIのチュートリアル「Part 1 ー Basics」

Atlasの作成

Assets下の画像フォルダ(例えばperfume/フォルダがあるとする)にある画像をすべて選択した上で、Unityのメニューの[NGUI] -> [Atlas Maker]をクリック。そのまま[Create]ボタンでテクスチャとマテリアルとアトラスオブジェクトが生成されると思います。

UI Spriteの作成

Widgetツールから、[template]に[Sprite]、[Atlas]にさっきつくったAtlasオブジェクトをD&D。これで[Add to]ボタン。そうするとSpritオブジェクトの出来上がり。インスペクタの[Sprite]フィールドで画像一覧を選べると思います。

Prefabの作成

できあがったオブジェクトはPrefab化して消します。

スクリプトから生成

下記のjacketAtlasはさっきのPrefab化したオブジェクトを入れます。それで普通にそのGameObjectをInstantiateし、UISpriteにファイル名(SpriteのID)を突っ込めば目的達成。座標は下記のコードだと同じ場所なので適当にずらしてね。

using UnityEngine;
using System.Collections;
using System.IO;

public class JacketGenerator : MonoBehaviour {
	public GameObject jacketAtlas;
	
	// Use this for initialization
	void Start () {
		DirectoryInfo dir = new DirectoryInfo("Assets/perfume/");
		FileInfo[] info = dir.GetFiles("*.*");
		foreach (FileInfo f in info) 
		{
			var obj = Instantiate(jacketAtlas, transform.position, Quaternion.identity) as GameObject;
			obj.transform.parent = transform;
			UISprite sprite = obj.GetComponent<UISprite>();
			sprite.spriteName = f.Name.Split('.')[0];
		}
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}