我正在尝试制作一个菜单系统,它将动态加载转到一组视频的按钮,我想通过 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;
}
}
关于为什么我的游戏或层次结构中没有按钮显示的任何想法? 提前致谢。
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);