【Unity】ボタンの画像を動的に変える
やりたかったこと
- uGUIのボタンの画像をスクリプトから動的に変えたかった。
- ゲームオブジェクトは複数にしたくなかった。
- ゲームオブジェクトを複数用意してSetActive()で出す方法も考えたがそれをやると内部を大分いじる必要が出る為没 - というか、力技すぎてソースがめっちゃ汚くなる
模索
SpriteRenderer
- 最初にSpriteRendererを用いる方法を思いついた。
using UnityEngine;
using System.Collections;
public class changeImage : MonoBehaviour {
// 画像を動的に変えたいボタンの宣言
SpriteRenderer btnSpriteRenderer;
// inspectorで直接画像のスプライトを張り付ける
public Sprite Asprite;
public Sprite Bsprite;
public Sprite Csprite;
void Start(){
// SpriteRendererを所得する
btnSpriteRenderer = this.GetComponent<SpriteRenderer>();
}
void Update(){
// フラグによってそれに合った画像に差し替える
if (flg == "a"){
btnSpriteRenderer.sprite = Asprite;
}else if(flg == "b"){
btnSpriteRenderer.sprite = Bsprite;
}else if(flg == "c"){
btnSpriteRenderer.sprite = Csprite;
}
}
}
- 動かなかった。
- どうやらuGUIのボタンの画像はSpriteRendererでは変えられず、Imageを用いないといけないらしい
Image
using UnityEngine;
using System.Collections;
// Imageを使うためにインポート。忘れずに
using UnityEngine.UI;
public class changeImage : MonoBehaviour {
// 画像を動的に変えたいボタンの宣言
SpriteRenderer btnImage;
// inspectorで直接画像のスプライトを張り付ける
public Sprite Asprite;
public Sprite Bsprite;
public Sprite Csprite;
void Start(){
// Imageを所得
btnImage = this.GetComponent<Image>();
}
void Update(){
// フラグによってそれに合った画像に差し替える
if (flg == "a"){
btnImage.sprite = Asprite;
}else if(flg == "b"){
btnImage.sprite = Bsprite;
}else if(flg == "c"){
btnImage.sprite = Csprite;
}
}
}
- 無事動いた
まとめ
- uGUIの画像をスクリプトから動的に変える場合はSpriteRendererではなくImageを使う
Read other posts