【Unity】Image(Script)のSourceImageを変更する

UnityのuGUIで、プログラム実行中にImageコンポーネントの画像を動的に差し替えたい場面は多いですよね。
本記事では、スクリプトから「Source Image」を変更する標準的な方法と、注意点を整理して解説します。

目次

ImageコンポーネントのSpriteを変更する基本

もっとも一般的で推奨される方法は、Imageコンポーネントのspriteプロパティに、新しいSpriteオブジェクトを代入する方法です。

ポイント
  • TextureではなくSprite型を代入する必要があります。
  • UnityEngine.UIの名前空間が必要です。
using UnityEngine;
using UnityEngine.UI; // Imageを扱うために必要

public class ImageChanger : MonoBehaviour
{
    [SerializeField] private Image targetImage;
    [SerializeField] private Sprite newSprite;

    public void ChangeImage()
    {
        // Source Imageを差し替え
        targetImage.sprite = newSprite;
    }
}

「Resourcesから読み込みたい場合はどうすればいいの?」という方は、以下のコードを参考にしてください。

動的にリソースをロードして変更する場合

あらかじめInspectorでアタッチできない場合、Resources.Loadを使用してプロジェクト内のファイルを読み込みます。

Resourcesフォルダを使用した読み込みは、現在のUnityではメモリ管理の観点から、大規模開発では「Addressables」などの利用が推奨されています。小規模なプロジェクトや学習用としては以下が有効です。

Resources.Loadを使用する例

// Assets/Resources/MyImage.png を読み込む場合
Sprite sp = Resources.Load<Sprite>("MyImage");
Image img = GetComponent<Image>();
img.sprite = sp;

以前の手法でTexture2Dとして読み込んでからSprite.Createで生成する方法もありましたが、最初から<Sprite>型としてロードする方がコードがシンプルになり、パフォーマンス面でも有利です。

マテリアルのメインテクスチャを変更する方法

特定のシェーダーを利用している場合など、Spriteそのものではなくマテリアルのテクスチャを差し替えたい場合はこちらを使用します。

Texture texture = Resources.Load<Texture>("image_path");
Image img = GetComponent<Image>();
img.material.mainTexture = texture;

マテリアル変更の注意:img.materialを直接操作すると、マテリアルのインスタンスが生成されます。大量のオブジェクトでこれを行うとメモリ消費が増えるため、用途に応じて使い分けましょう。

まとめ:最適な手法の選び方

現在のUnity開発において、Imageの変更は以下の優先順位で検討するのがベストです。

手法メリットどんな時に使うか
SerializeFieldでアタッチ高速・安全・メモリ管理が楽基本的にはこれ
Resources.Load<Sprite>動的なパス指定が可能簡易的な動的生成
Addressables (最新)メモリ管理が最強本格的なアプリ開発

今回はImageのSource Imageをスクリプトから操作する方法を解説しました。
UIの動的な変化はユーザー体験に直結する部分ですので、ぜひ活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

はじめまして、秋月なるです。

アラフォー会社員で、スマホアプリ/ゲーム/AIが好き。
新しいものを見ると触りたくなるタイプで、スマホやウェアラブル等ガジェットが好きですが、よく買ったあとに「思ってたのと違う…」をやりがち。

ブログ投稿は趣味の1つなので、興味があるもの全般をゆるく続けていこうと思います。

目次