読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

アトラス意識せずにスプライトの変更【Unity】【NGUI】

Unity NGUI

このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.2.2f1 Personal
NGUI 3.9.2

はじめに

NGUIのUISpriteは同じアトラスの画像であれば、

画像名を指定するだけで変更できます。

//スプライトの変更
sprite.spriteName = spriteName; 


ということは、もし違うアトラスにある画像に変更したい場合は、

UISpriteのatlasも変更しなきゃいけません。

//アトラスの変更
sprite.atlas  = newAtlas ;

//スプライトの変更
sprite.spriteName = spriteName; 


この場合は当然、変更したい画像がどのアトラスに入ってるか知ってる必要があります。


それで今回はアトラスを意識せずにスプライトを変える方法のご紹介です。


UIAtlasManager

やり方は単純で、全アトラスを読み込み&保持して、

スプライトを変える時に全アトラスの中から、変更したいスプライトを含むものを設定するだけです。


具体的には以下のようなコードになります。

なお、マネージャクラスとありますが、シングルトン部分は省略しているのであしからず。



このUIAtlasManagerを使うと以下のように

アトラスを意識せずにChangeUISpriteだけでスプライトが変更できるようになります。

atlasManager.ChangeUISprite(sprite, "newSpriteName"); 


なお、アトラスはResources/Atlasにまとめて入れておく必要があります。


おわりに

紹介しといてなんですが、今回のやり方は

かなり深刻な欠点がありますのでご注意ください。


その欠点とはメモリをかなり消費するということです。

まぁ、常に全アトラスを読み込んでる状態なので当たり前ですね。

テクスチャはメモリを食いやすいと思うので、十分に気を配りましょう。



また、同名のスプライトが違うアトラスにあると、違うものになるかもしれないという欠点もあります。


使用の際には諸々ご注意を(:3っ)∋〜