短編RPG制作(Unity2D)【第29回】メニューの作成その7


メニューへの表示

用意した枠にアイテムの画像とテキストを表示したいと思います。

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

public class MenuButton : MonoBehaviour
{
    [SerializeField] private PlayerStatus _playerStatus;
    [SerializeField] private Canvas _canvas;
    [SerializeField] private GameObject _panelItemIcon;
    [SerializeField] private GameObject _panelItemContent;
    [SerializeField] private Image imageItemIcon;
    [SerializeField] private Image imageItemContent;
    private bool canvasEnable = false;
    private List<ItemData> itemList;
    private List<int> itemPossessions;
    private int itemCount;

    public void OnClickMenuButton()
    {
        if (!canvasEnable)
        {
            MenuUpdate();
            _canvas.enabled = true;
            canvasEnable = true;
        }
        else
        {
            _canvas.enabled = false;
            canvasEnable = false;
        }
        
    }

    // メニュー表示の更新
    private void MenuUpdate()
    {

        itemList = _playerStatus.GetItemList();
        itemPossessions = _playerStatus.GetItemPossessions();
        itemCount = itemList.Count;

        // すべての子オブジェクトを削除
        for
each (Transform child in _panelItemIcon.transform)
        {
            GameObject.Destroy(child.gameObject);
        }
        foreach (Transform child in _panelItemContent.transform)
        {
            GameObject.Destroy(child.gameObject);
        }

        // 所持アイテム種類数だけの枠を生成
        for (int i = 0; i < itemCount; i++)
        {
            Instantiate(imageItemIcon, _panelItemIcon.transform);
            Instantiate(imageItemContent, _panelItemContent.transform);
        }

        // アイテムを表示
        // 子オブジェクトのコンポーネントを取得する
        Image[] itemImages = _panelItemIcon.GetComponentsInChildren<Image>();
        Text[] itemContents = _panelItemContent.GetComponentsInChildren<Text>();

        // 子オブジェクトを順に取得する
        for (int i = 0; i < itemCount; i++)
        {
            itemImages[i].sprite = itemList[i].GetItemIcon();
        }
    }
}

メニューボタンのスクリプトに追加しました。
未完成なのでデバッグ表示も入っています。
アイコンと内容それぞれの枠(_panelItemIconと_panelItemContent)に、プレイヤーが所持しているアイテムから情報を持ってきます。
子オブジェクトの要素は"GetComponentsInChildren"で取得しています。

実行結果

今回画像は省きますが、アイテムの画像が表示されませんでした……。

まとめ

全然思った通りに実装できませんでした……。
原因が分からないので、次回は変数を色々確認しながら修正していきます。

この記事が気に入ったらサポートをしてみませんか?