使用 JSON 脚本的动态菜单没有结果

问题描述 投票:0回答:1

我正在尝试制作一个菜单系统,它将动态加载转到一组视频的按钮,我想通过 JSON 脚本为菜单系统按钮提供数据,但是我无法显示数据,我有已经确认我的脚本在修改它以获取 JSON 数据之前可以使用基本列表,这意味着我的按钮预制件没有问题。

当我 debug.log json 对象时,它会生成文件,当我运行游戏时,没有文件路径错误,这意味着所有内容都被正确读取。我还确认 panelTransform 游戏对象已正确分配。

JSON文件:

{
  "Albania":
  [
    {
      "buttonId": 1,
      "buttonText": "Tirana1"
    },
    {
      "buttonId": 2,
      "buttonText": "Tirana2"
    },
    {
      "buttonId": 3,
      "buttonText": "Tirana3"
    },
    {
      "buttonId": 4,
      "buttonText": "Tirana3"
    }
  ]
}

附加到我的画布对象的脚本(包含面板对象):

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

public class ButtonsMenu1 : MonoBehaviour
{
    //public List<ButtonData> buttonData;
    public GameObject buttonPrefab;
    public Transform panelTransform;
    public string jsonFilePath;

    void Start()
    {
        string json = File.ReadAllText(jsonFilePath);
        Debug.Log(json);
        List<ButtonData> buttonData = JsonUtility.FromJson<List<ButtonData>>(json);

        Debug.Log("Panel object: " + panelTransform.name);

        foreach (ButtonData data in buttonData)
        {
            GameObject buttonObj = Instantiate(buttonPrefab, panelTransform); //Instantiates the button within the Transform of the panel
            Button button = buttonObj.GetComponent<Button>(); 
            TMP_Text buttonText = buttonObj.GetComponentInChildren<TMP_Text>();

            button.onClick.AddListener(() => { ButtonClicked(data.buttonId); });
            buttonText.text = data.buttonText;
        }
    }

    void ButtonClicked(int buttonId)
    {
        // Handle button click based on button ID
    }

    public class ButtonData
    {
        public int buttonId;
        public string buttonText;
    }
}

关于为什么我的游戏或层次结构中没有按钮显示的任何想法? 提前致谢。

c# json unity3d
1个回答
0
投票

json 声明了一个对象,该对象具有名为“Albania”的属性,该属性是对象的集合。这些类还需要 Serializable 属性。

[System.Serializable]
public class Data
{
    public List<ButtonData> Albania;
}
[System.Serializable]
public class ButtonData
{
    public int buttonId;
    public string buttonText;
}

var buttonData = JsonUtility.FromJson<Data>(json);
© www.soinside.com 2019 - 2024. All rights reserved.