Categories: Unity

【Unity】スプライト(画像)を差し替える方法

この記事では、Unityでスプライト(画像)を差し替える方法を解説します。

スプライトを差し替えるには以下の方法があります。

  • SpriteRendererから差し替える
  • SpriteLibraryを使う

それでは、それぞれ詳しく見ていきましょう!

方法1. SpriteRendererから差し替える

SpriteRendererコンポーネントのspriteプロパティを変更することでスプライトを差し替えることができます。手順としては以下の通りです。

1. SpriteRendererを取得する。

spriteRenderer = GetComponent<SpriteRenderer>();

2. SpriteRenderer.spriteに新しいスプライトを渡す。

spriteRenderer.sprite = NewSprite;

これで先ほどのSpriteRendererのスプライトとしてNewSpriteを表示させることができます。

例えば、Spaceキーを押した際にスプライトを切り替えたい場合は以下のような感じです。

using UnityEngine;

public class SpriteChange : MonoBehaviour
{
    private SpriteRenderer spriteRenderer;

    // インスペクターからスプライトを受け取っておく
    [SerializeField]
    private Sprite newSprite;

    void Start()
    {
        spriteRenderer = GetComponent();
    }

    void Update()
    {
        // Spaceキーが押されたら
        if(Input.GetKeyUp(KeyCode.Space))
        {
            // スプライトを差し替える
            spriteRenderer.sprite = newSprite;
        }
    }
}

方法2. SpriteLibraryを使う

SpriteLibraryコンポーネントを使うことで登録した複数のスプライトを自由に切り替えることができます。手順としては以下の通りです。

  • STEP1
    スプライトを差し替えたいオブジェクト、またはそれらのオブジェクトを含む親に「SpriteLibrary」コンポーネントをアタッチする

    今回は「Parent」という空オブジェクトに「Triangle」スプライトを子として配置しました。

    オブジェクトを配置したら「Parent」に「SpriteLibrary」コンポーネントをアタッチします。

  • STEP2
    「Sprite Library Asset」の作成・設定

    プロジェクト上で右クリックを押し、Create(作成)2DSprite Library Assetで作成します。名前はなんでもいいですが、今回は「Sprites」にしました。

    そしたら、先ほど作成した「Sprites」のインスペクターにある「+」をクリックしてカテゴリを追加し、カテゴリ名を変更します。(ここでは「Shapes」)

    次に「Entry」というスプライトとラベルのセットを追加します。カテゴリ内の「+」をクリックしてください。すると、新たにスプライトとラベルが追加されるので使用したいスプライトを渡し、それに対応するラベル名に変更します。(今回は標準スプライトを使用)

    設定できたら右下の「Apply(適用する)」を忘れずにクリックしてください。

    これで「Sprite Library Asset」が作成できたので「Parent」の「Sprite Library」コンポーネントの「Sprite Library Asset」の項目に「Sprites」を指定します。

  • STEP3
    画像を差し替えたいオブジェクトに「Sprite Resolver」コンポーネントをアタッチする

    「Triangle」オブジェクトに「Sprite Resolver」コンポーネントをアタッチし、インスペクターで「カテゴリ」項目を使用したいカテゴリに変更します。

    表示されたスプライトをクリックすることで初期のスプライトを変更することができます。

  • STEP4
    コードからスプライトを切り替える

    SpriteResolverを使うにはUnityEngine.U2D.Animationusingする。

    using UnityEngine.U2D.Animation;

    SpriteResolver.SetCategoryAndLabel()にカテゴリとラベルを指定することでスプライトを切り替えることができます。

    ここでは以下のようなコードを「Triangle」オブジェクトにアタッチしました。

    using UnityEngine;
    using UnityEngine.U2D.Animation;  // SpriteResolver を使用するには必要
    
    public class SpriteChanger : MonoBehaviour
    {
        private SpriteResolver spriteResolver;
        private string category;
    
        // Start is called before the first frame update
        void Start()
        {
            spriteResolver = GetComponent();
            category = "Shapes";
        }
    
        void Update() 
        {
            if(Input.GetKeyUp(KeyCode.A))
            {
                spriteResolver.SetCategoryAndLabel(category, "Triangle");
            }
            else if(Input.GetKeyUp(KeyCode.S))
            {
                spriteResolver.SetCategoryAndLabel(category, "Square");
            }
            else if(Input.GetKeyUp(KeyCode.D))
            {
                spriteResolver.SetCategoryAndLabel(category, "Circle");
            }
            else if(Input.GetKeyUp(KeyCode.F))
            {
                spriteResolver.SetCategoryAndLabel(category, "Capsule");
            }
        }
    }

    これで A,S,D,F キーを押すたびに対応したスプライトに切り替えることができます!

まとめ

この記事では、Unityでスプライト(画像)を差し替える方法を解説しました。

一度しか変更しない場合にはSpriteRenderer.spriteに直接代入したほうがいいですが、何度も切り替えたりしたい場合はSpriteLibraryの方が効率的です。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago