我知道如何加载文字,但是如何从json加载精灵/图片。
private string mygameDataFileName = "TSdatabase.json";
这是我将JSON连接到我的游戏的代码
private void myLoadGameData() //LOAD THE DATA
{
string myfilePath = Path.Combine(Application.streamingAssetsPath, mygameDataFileName); //I THINK THIS IS THE PATH OF THE FILE
假设如果文件存在,那么它将找到它的路径。
if (File.Exists(myfilePath))
{
string mydataAsJson = File.ReadAllText(myfilePath); // READ THE FILE
TSGameData myloadedData = JsonUtility.FromJson<TSGameData>(mydataAsJson); // TSGAME DATA IS A ANOTHER SCRIPT THAT HAVE AN ARRAY FOR THE DATA
myRoundData = myloadedData.myRoundData;
} //myRoundData IS A VARIABLE THAT HOLDS THE ARRAY OF TSROUNDDATA TO GET THE DATA
else
{
Debug.LogError("Cannot load game data!");
}
}
这是我的JSON文件脚本
{
"myRoundData": [
{
"name": "Signs",
"timeLimitInSeconds": 59,
"pointsAddedForCorrectAnswer": 5,
"questions": [
{
"questionImage": "NoentryPlate",
"questionText": "What is this?",
"answers": [
{
"answerText": "Traffic Lights",
"isCorrect": true
},
{
"answerText": "Traffic Signs",
"isCorrect": false
},
{
"answerText": "None of the above",
"isCorrect": false
}
]
}
]
}
]
}
答案 0 :(得分:0)
以下代码将循环遍历myRoundData对象中的所有问题,并使用SpriteRenderer组件创建一个新的gameObject,并将加载的精灵分配给渲染器。您可能需要更改CreateImages
参数的数据类型以匹配myRoundData对象中questions
属性的数据类型。
private List<GameObject> QuestionImageObjects = new List<GameObject>();
private void myLoadGameData() //LOAD THE DATA
{
string myfilePath = Path.Combine(Application.streamingAssetsPath, mygameDataFileName); //I THINK THIS IS THE PATH OF THE FILE
if (File.Exists(myfilePath))
{
string mydataAsJson = File.ReadAllText(myfilePath); // READ THE FILE
TSGameData myloadedData = JsonUtility.FromJson<TSGameData>(mydataAsJson); // TSGAME DATA IS A ANOTHER SCRIPT THAT HAVE AN ARRAY FOR THE DATA
myRoundData = myloadedData.myRoundData;
CreateImages(myRoundData.questions);
} //myRoundData IS A VARIABLE THAT HOLDS THE ARRAY OF TSROUNDDATA TO GET THE DATA
else
{
Debug.LogError("Cannot load game data!");
}
}
private void CreateImages(List<Question> questions)
{
//The two while loops below allow existing image gameobjects to be reused
// Destroy excess images
while(QuestionImageObjects.Count > questions.Count)
{
Destroy(QuestionImageObjects[QuestionImageObjects.Count - 1]);
QuestionImageObjects.RemoveAt(QuestionImageObjects.Count - 1);
}
// Create missing images
while(QuestionImageObjects.Count < questions.Count)
{
GameObject image = new GameObject("Question Image " + QuestionImageObjects.Count);
image.AddComponent<SpriteRenderer>();
QuestionImageObjects.Add(image);
}
for (int i = 0; i < questions.Count; i++)
{
QuestionImageObjects[i].GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>(questions[i].questionImage);
}
}