【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を使う