Unty List.Add防止在Android上更新精灵
本文关键字:Android 更新 精灵 List Add Unty | 更新日期: 2023-09-27 18:27:28
我有一个方法,当按下按钮时会被调用,
private List<Page> _pages = new List<Page>();
public void LoadKern(int requestedKern)
{
TextAsset pages = Resources.Load("kern" + requestedKern) as TextAsset;
JSONArray jsonPages = JSON.Parse(pages.text)["pages"].AsArray;
foreach (JSONNode page in jsonPages)
{
_pages.Add(new Page(page["image"], page["text"]));
}
ImageSpriteRenderer.sprite = Resources.Load<Sprite>(_pages[currentPage].image);
TextSpriteRenderer.sprite = Resources.Load<Sprite>(_pages[currentPage].text);
}
在模拟器中运行时,代码运行得很好,但每当我将其部署到android设备或使用Unty Remote 4时,它就不再更新精灵。
每当我删除这一行并手动设置资源时,它都会在按下按钮时更新。
_pages.Add(new Page(page["image"], page["text"]));
它在桌面上可以工作,但在安卓系统上却不能工作,这似乎很奇怪,是不是我缺少了什么?
我觉得很难把它放在注释中,所以我把它写在这里作为答案。
验证这一问题的最简单方法是Resource.Load<>,是添加以下代码:
TextAsset pages = Resources.Load("kern" + requestedKern) as TextAsset;
Debug.Load(pages + "are Loading"); // to see if it is really loaded successfully
连接您的设备并打开adb日志,用"正在加载"过滤消息。如果您看到页面null,那么很明显Resource.Load<>是罪魁祸首。
如果是Resource.Load<>问题,您可以考虑使用StreamingAssets:
Unity项目中名为StreamingAssets的文件夹中的任何文件都将被逐字复制到目标机器上的特定文件夹中。您可以使用Application.streamingAssetsPath属性检索文件夹。最好使用Application.streamingAssetsPath获取StreamingAssets文件夹的位置,它将始终指向运行应用程序的平台上的正确位置。
在Android上,您应该使用:
path = "jar:file://" + Application.dataPath + "!/assets/";
我怀疑你加载文本资产是在运行时进行的,当你打包应用程序时,文本资产不会被读取,它可能会被排除在项目之外,因为Unity认为这"没有使用"。当你在安卓系统上运行该应用程序时,它很自然会失败。
使用StreamingAssets方法,您可以强制Unity"逐字逐句"复制文本资产,从而确保在运行时可以访问它!