【Unity】2Dシューティングを作る ~画像の切り替え~

Unityで画像の切り替え unity

プレイするゲームがないなら、自分で作ればいいじゃない!

ということで初心者が Unity を使って「ゲームを作る」ゲームをやっていきます!

今回は「画像の切り替え」の記事です

 

スポンサーリンク

内容

「画像の切り替え」を使用して、タイトル画面を修正していきます

 

タイトルメニューの作成

メニューの画像を用意します

入れ替え用

同様に「Option」、おまけでカーソルも用意しました

カーソル

 

タイトルシーンに配置する

各画像を適当に置きます

Unityタイトルメニューの設定

 

画像を切り替えるには

Sprite Renderer の sprite を変更する必要があります

Sprite RendererとSprite
ここに直接ドラッグアンドドロップしたら画像が変わる

※レイヤーの順序の数値を変えると描画の優先度を変更できます

 

スクリプトから変更できるようにする

メニューのオブジェクトにC#スクリプトをアタッチして、差し替え処理を追加します

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TitleMenu : MonoBehaviour
{
    public Sprite OffSprite;
    public Sprite OnSprite;

    // 画像描画用のコンポーネント
    SpriteRenderer spriteRenderer;

    // Start is called before the first frame update
    void Start()
    {
        spriteRenderer = gameObject.GetComponent<SpriteRenderer>();
    }

    // カーソルが合っているとき
    public void On()
    {
        // 画像を切り替える
        spriteRenderer.sprite = OnSprite;
    }
    // カーソルが合っていないとき
    public void Off()
    {
        // 画像を切り替える
        spriteRenderer.sprite = OffSprite;
    }
}

 

エディターで変更できる Sprite を2つ用意します

SpriteRenderer は Start で取得しておきましょう

あとは On か Off を呼び出せば、設定した画像に切り替わるはずです 

Sprite の設定
Unityエディタでスクリプトを設定
スクリプト名が違うのは次回で

 

タイトルのスクリプト

メニューがある程度できたので、それを操作するスクリプトを用意します

public class Title : MonoBehaviour
{
    int Cursor = 0;
    public TitleMenu[] MenuTable;
    public SpriteRenderer CursorRenderer;

    // Start is called before the first frame update
    void Start()
    {
        UpdateMenu();
    }

    // Update is called once per frame
    void Update()
    {
        int oldCursor = Cursor;
        int cursorMax = MenuTable.Length;

        if (Input.GetButtonDown("CursorUp"))
        {
            Cursor--;
        }
        else if (Input.GetButtonDown("CursorDown"))
        {
            Cursor++;
        }

        // カーソルの制御
        if(Cursor < 0)
        {
            Cursor = MenuTable.Length - 1;
        }
        if(Cursor >= cursorMax)
        {
            Cursor = 0;
        }

        // カーソルに変更があったら
        if(Cursor != oldCursor)
        {
            UpdateMenu();
        }
    }

    // メニューの更新
    void UpdateMenu()
    {
        int cursor = 0;
        foreach (TitleMenu menu in MenuTable)
        {
            if (Cursor == cursor)
            {
                menu.On();

                // カーソルの位置を設定
                CursorRenderer.transform.position = menu.transform.position;
            }
            else
            {
                menu.Off();
            }

            ++cursor;
        }
    }
}

 

public TitleMenu[] MenuTable;

[] にするとエディター側で追加できるようになります

後々メニューが増えても対応できるように、この形にしてみました

エディター側
Unityエディタで配列を設定

+で要素を増やして、オブジェクトをドラッグアンドドロップします

 

void UpdateMenu()

カーソルが変わったときに呼び出す

カーソルと要素番号が同じならば On
それ以外は Off

ついでにカーソル位置も変更している

 

サンプル動画

 

さいごに

画像の切り替えはできましたが

まだメニューに合った操作ができていません

次回は Start を選択したときにゲームのメインへ遷移するようにしてみます

かれいど

ゲームをしたり、作ったり
色々な事に挑戦していきたい!

サッカー観戦も趣味で
主にJ1リーグを観ています。

かれいどをフォローする
unity
スポンサーリンク
シェアする
かれいどブログ

コメント