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

(:3[kanのメモ帳]

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

サイズを合わせてUISpriteの画像を変更【Unity】【NGUI】【拡張メソッド】


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


この記事でのバージョン
Unity 5.1.0f3 Personal
NGUI 3.9.2

はじめに

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

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

uiSprite.spriteName = "Button";


ただし、スプライトのサイズは元のままなので、

サイズが違うものに変更してしまうと、見た目がおかしくなってしまいます。


上が元画像、下がサイズが違う画像に変えたもの

f:id:kan_kikuchi:20150917134652p:plain


またアトラス内にスプライトが存在しない場合はエラーにならず、何も表示されません。


以上の事を解決するためにUISpriteの拡張メソッドを作ってみました。


UISpriteExtension

各スプライトのサイズはUISpriteDataから参照でき、このUISpriteDataはUIAtlasに入っています。

さらに各UISpriteは自分が入っているUIAtlasのデータを.atlasで参照できます。

つまりuiSprite.atlas.GetSprite("画像名").widthで画像の横幅が取れるという事です。


この方法でサイズを取得し、画像変更すると同時にサイズの変更も行う拡張メソッドが以下になります。


追記

コメントでMakePixelPerfectを使っても同じ事が出来ると教えてもらったので、コードに追加しました。

UISpriteDataがいらないので、MakePixelPerfect使った方が簡単ですね。

追記終わり



このUISpriteExtension.csを作成すると、

ChangeSpriteを使って画像変更が出来るようになります。

uiSprite.ChangeSprite("Button");

f:id:kan_kikuchi:20150917135405p:plain


指定した画像が無い場合は画像を変更しないようにしているので、

先ほど挙げた点を解決している拡張メソッドとなります。