NGUIのUIButtonの画像をscriptで変える
UnityのNGUIのUIButtonを使ってボタンをつくり、Prefab化して、 実際に使うときにはPrefabをInstantiateして、画像だけが違うボタンをたくさん作りたかったので、
UISprite uiSprite = GetComponent<UISprite>();
uiSprite.spriteName = "newSpriteName";
としていたのですが、
NGUIを3.4.8から3.5.4にバージョンアップしたら、UIButtonがHover状態からNormal状態に戻ったときに画像がPrefab化したときの画像に戻ってしまった。 Assets/NGUI/Scripts/Interaction/UIButton.csを見てみると、今の状態に応じてSetSpriteしているみたい。
protected override void SetState (State state, bool immediate) { base.SetState(state, immediate); switch (state) { case State.Normal: SetSprite(mNormalSprite); break; case State.Hover: SetSprite(hoverSprite); break; case State.Pressed: SetSprite(pressedSprite); break; case State.Disabled: SetSprite(disabledSprite); break; } }
mNormalSpriteがPrefab化したときのスプライト名になっていたのが原因ぽかったので
UIButton uiButton = GetComponent<UIButton>();
uiButton.normalSprite = "newSpriteName";
としてNormal状態のスプライト名を指定したらうまくいった!よかった!