NGUIは複数のスプライトのテクスチャを1つのアトラスにまとめて管理する便利な機能がついてる。
ただ、スクリプトで生成したUISprite付きGameObjectにSpriteを割り当てるには先にUIAtlasを渡さなければならない。
スクリプトでどうやるのかしらべたところ、AtlasをInstantiateしてるサンプルを見つけた。
– NGUIをスクリプトのみで構築したいので調べてみた
しかしこれだとScene上にPrefab(Clone)た配置されてしまうし、読む都度Cloneが生成されて美しくない。
そのうえ、 Instantiate
した Prefab
を Destroy
するとせっかく読んだ Sprite
は参照が missing
で表示されなくなる。
というわけで色々試した結果、以下のスクリプトで対応できた。
var g = new GameObject();
g.transform.parent = this.transform;
g.transform.localPosition = Vector3.zero;
var s = g.AddComponent<UISprite>();
s.atlas = Resources.Load<UIAtlas>( "AtlasPath" ); // atlasのプレファブを読むよ
s.spriteName = "FireIcon";
s.depth = 300;
s.MakePixelPerfect();
型引数でResourcesからAtlasだけを抜き出して割り当てるということ。