Application.streamingAssetsPath和WebGL构建

时间:2017-04-29 07:53:43

标签: c# json unity3d unity-webgl

在我正在处理的项目中,我在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");

我应该在那里写什么?这是一个网址吗?如果它是一个网址,那是什么网址?

如果有人能握住我的手并引导我理解这一点,我将非常感激!谢谢!

(这是我的第一个问题;我希望我没有犯过错误,因为我不知道这个地方是如何运作的。)

2 个答案:

答案 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