短編RPG制作(Unity2D)【第63回】装備その6


装備

UI自動生成スクリプト

武器データを格納すると、自動でUIが生成されるようにスクリプトを記述しました。

データからUIを生成
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ShopManager : MonoBehaviour
{
    // 参照
    private RectTransform _rectTransform; // 親要素の参照
    [SerializeField] private GameObject _weaponPanel; // 子要素の参照

    // 武器一覧
    [SerializeField] private List<WeaponData> weaponList;

    // UIのPrefub
    [SerializeField] private GameObject weaponPanel; // 子要素のプレハブ

    private void Start()
    {
        // 自身の参照を取得
        _rectTransform = GetComponent<RectTransform>();

        // リストに存在する武器のUIを生成
        for (int i = 0; i < weaponList.Count; i++)
        {
            Instantiate(weaponPanel, _rectTransform);
            _weaponPanel = _rectTransform.GetChild(i).gameObject;
            WeaponSetting(_weaponPanel, i);

        }
    }

    private void WeaponSetting(GameObject weaponPanel, int i)
    {
        // 参照
        RectTransform _rectTransform; // weaponPanel(子要素)の参照
        RectTransform _rectTransform2; // weaponPanel(子要素)の参照

        // 子要素、孫要素の参照を取得
        _rectTransform = weaponPanel.GetComponent<RectTransform>(); // 子要素
        _rectTransform.GetChild(0).GetComponent<Text>().text = weaponList[i].GetWeaponName();
        _rectTransform.GetChild(1).GetComponent<Image>().sprite = weaponList[i].GetIcon();
        _rectTransform.GetChild(2).GetComponent<Text>().text = "ATK + " + weaponList[i].GetStatus() + "%";
        _rectTransform.GetChild(3).GetComponent<Text>().text = weaponList[i].GetContentText();

        _rectTransform2 = _rectTransform.GetChild(4).GetComponent<RectTransform>(); // 孫要素
        _rectTransform2.GetChild(0).GetComponent<Text>().text = weaponList[i].GetValue() + " Gold";
    }
}

リストに格納したデータの数だけプレハブを複製して、そこにデータの内容を入力しています。
他にいい方法がないか探してみたのですが、結局プレハブの内容に合わせて参照を取得してぶち込んでいくのが手っ取り早いという結論に達しました。(プレハブの構成は頻繁に変えるものでもないですし……)

まとめ

UIを自分で複製・入力せずともデータ登録だけで済むようにできました。
次回は購入処理の実装を行います。

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