在我正在处理的项目中,我在StreamingAssets目录中有两个json文件。处理它们的脚本在独立PC构建中完美地工作,但在WebGL中根本不起作用。
我收到了“无法找到文件!”消息根据脚本:
else if (!File.Exists (filePath))
{
Debug.LogError ("Cannot find file!");
}
我得到了使用WWW类的答案,如Unity Technologies网站上的脚本API所述,地址为:https://docs.unity3d.com/ScriptReference/Application-streamingAssetsPath.html
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");
public string result = "";
IEnumerator Example() {
if (filePath.Contains("://")) {
WWW www = new WWW(filePath);
yield return www;
result = www.text;
} else
result = System.IO.File.ReadAllText(filePath);
}
}
我很乐意这样做,但我对编码太新了,我需要一些解释。我现在面临的第一个问题是:行中“我的文件”字符串是什么
public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");
我应该在那里写什么?这是一个网址吗?如果它是一个网址,那是什么网址?
如果有人能握住我的手并引导我理解这一点,我将非常感激!谢谢!
(这是我的第一个问题;我希望我没有犯过错误,因为我不知道这个地方是如何运作的。)
答案 0 :(得分:2)
我现在面临的第一个问题是:这个“我的文件”字符串是什么 这条线
这应该是文件的名称。虽然它缺少它的扩展名。你应该添加它。例如, .txt , .jpg , png ....
我应该在那里写什么?这是一个网址吗?如果它是一个网址, 什么的网址?
您应该使用扩展名来编写文件名,其中“MyFile”。
示例使用:
在您的项目中,您创建一个名为“ StreamingAssets ”的文件夹。
假设您有一个名为“Anne.txt”的文件,该文件位于“StreamingAssets”中。文件夹,这应该是你的路径:
public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "Anne.txt");
现在假设“ Anne.txt ”文件夹放在名为“ Data ”的文件夹中,然后在“ StreamingAssets “文件夹,它应该如下所示:” StreamingAssets / Data / Anne.txt “。
你的道路应该是:
public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "Data");
filePath = System.IO.Path.Combine(filePath , "Anne.txt");
就是这样。这里没什么复杂的。然后,将该路径字符串与WWW
一起使用。
此外,if (filePath.Contains("://"))
应为if (filePath.Contains ("://") || filePath.Contains (":///"))
。
修改强>
如果您要加载多个文件,我会将该功能简化为此,以便将文件名作为参数。
IEnumerator loadStreamingAsset(string fileName)
{
string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, fileName);
string result;
if (filePath.Contains("://") || filePath.Contains(":///"))
{
WWW www = new WWW(filePath);
yield return www;
result = www.text;
}
else
result = System.IO.File.ReadAllText(filePath);
}
现在,假设您有3个文件名为“ Anne.txt ”,“ AnotherAnne.txt ”和“ OtherAnne.txt “放置在” StreamingAssets “文件夹中,您可以使用以下代码加载它们:
StartCoroutine(loadStreamingAsset("Anne.txt"));
StartCoroutine(loadStreamingAsset("AnotherAnne.txt"));
StartCoroutine(loadStreamingAsset("OtherAnne.txt"));
答案 1 :(得分:0)
您从文件夹中读取
您需要从服务器读取webgl
WebGl不允许您这样做。
这是建议
https://docs.unity3d.com/Manual/UnityWebRequest-RetrievingTextBinaryData.html