我想在json上加载sprite但是如何?正在显示文字但不显示图像。
这是加载我的文本数据的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脚本。我不确定这是否是一个加载图像的有效脚本。
"questionImage":"Assets/ImagesQuiz/NoentryPlate.png"
答案 0 :(得分:0)
要成为有效的JSON,您的文本文件内容应位于括号内,如下所示:
{ "questionImage":"Assets/ImagesQuiz/NoentryPlate.png" }
请查看JSON格式文档here。
答案 1 :(得分:0)
您应该检查有关加载图像的文档,同时尝试使用断点查看输入到函数中的内容以及该路径是否实际存在(它看起来像绝对路径,如果是这样,很可能无法工作)
我想如果JSON有问题你会得到相关的错误,但似乎更像是错过使用函数和/或不正确的文件路径
答案 2 :(得分:0)
假设questionImage
是myRoundData
变量中的属性,您需要获取字符串并将其用作资产路径,Unity具有通过路径加载资产的简单功能
Resources.Load<T>(string path)
此函数将返回已加载的资产引用作为提供的泛型类型。但是,Resources.Load
方法希望所有资产都存储在Resources
文件夹中的Assets
文件夹中。您可以将多个Resources
个文件夹嵌套在其他各种文件夹中。例如,您可以拥有以下文件
假设它们的纹理类型设置为Sprite
,则可以使用
Resources.Load<Sprite>("Test1");
Resources.Load<Sprite>("UI/Textures/Test2");
Resources.Load<Sprite>("Test3");
需要注意的一些事项
Resources
文件夹。 (参见中的Test2.png
上面的例子)使用这种方法,您首先需要更改将questionImage
属性值存储为此类
{ "questionImage":"NoentryPlate" }
然后,使用您提供的代码,我们可以添加一个额外的方法来处理此资源加载和精灵设置部分。我们需要一个带有SpriteRenderer
组件的GameObject的引用(你可以创建一个空的gameObject并自己添加组件)。加载精灵后,您可以将sprite
组件的SpriteRenderer
属性设置为刚刚加载的精灵。
public SpriteRenderer MySprite;
private Sprite LoadedSprite = null;
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;
// vvv CALL OUR NEW METHOD HERE vvv
LoadSprite(myRoundData.questionImage);
} //myRoundData IS A VARIABLE THAT HOLDS THE ARRAY OF TSROUNDDATA TO GET THE DATA
else
{
Debug.LogError("Cannot load game data!");
}
}
private void LoadSprite (string path)
{
if (LoadedSprite != null)
Resources.UnloadAsset(LoadedSprite);
LoadedSprite = Resources.Load<Sprite>(path);
MySprite.sprite = LoadedSprite;
}