短編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"で取得しています。
実行結果
今回画像は省きますが、アイテムの画像が表示されませんでした……。
まとめ
全然思った通りに実装できませんでした……。
原因が分からないので、次回は変数を色々確認しながら修正していきます。
この記事が気に入ったらサポートをしてみませんか?