この記事でのバージョン
Unity 5.1.0f3 Personal
NGUI 3.9.2
はじめに
NGUIのUISpriteは同じアトラスの画像であれば、
画像名を指定するだけで変更できます。
uiSprite.spriteName = "Button";
ただし、スプライトのサイズは元のままなので、
サイズが違うものに変更してしまうと、見た目がおかしくなってしまいます。
上が元画像、下がサイズが違う画像に変えたもの
またアトラス内にスプライトが存在しない場合はエラーにならず、何も表示されません。
以上の事を解決するためにUISpriteの拡張メソッドを作ってみました。
UISpriteExtension
各スプライトのサイズはUISpriteDataから参照でき、このUISpriteDataはUIAtlasに入っています。
さらに各UISpriteは自分が入っているUIAtlasのデータを.atlasで参照できます。
つまりuiSprite.atlas.GetSprite("画像名").widthで画像の横幅が取れるという事です。
この方法でサイズを取得し、画像変更すると同時にサイズの変更も行う拡張メソッドが以下になります。
追記
コメントでMakePixelPerfectを使っても同じ事が出来ると教えてもらったので、コードに追加しました。
UISpriteDataがいらないので、MakePixelPerfect使った方が簡単ですね。
追記終わり
このUISpriteExtension.csを作成すると、
ChangeSpriteを使って画像変更が出来るようになります。
uiSprite.ChangeSprite("Button");
指定した画像が無い場合は画像を変更しないようにしているので、
先ほど挙げた点を解決している拡張メソッドとなります。