C# Application.StreamingAssetPath和WebGL构建

C# Application.StreamingAssetPath和WebGL构建,c#,json,unity3d,unity-webgl,C#,Json,Unity3d,Unity Webgl,在我正在处理的一个项目中,StreamingAssets目录中有两个json文件。处理它们的脚本在独立的PC构建中可以完美地工作,但在WebGL构建中根本无法工作 根据脚本,我收到“找不到文件!”消息: else if (!File.Exists (filePath)) { Debug.LogError ("Cannot find file!"); } 我得到的答案是使用Unity Technologies网站上脚本API中描述的WWW类,地址如下:

在我正在处理的一个项目中,StreamingAssets目录中有两个json文件。处理它们的脚本在独立的PC构建中可以完美地工作,但在WebGL构建中根本无法工作

根据脚本,我收到“找不到文件!”消息:

    else if (!File.Exists (filePath))
    {
        Debug.LogError ("Cannot find file!"); 
    }
我得到的答案是使用Unity Technologies网站上脚本API中描述的WWW类,地址如下:

我很乐意这么做,但我对编码太陌生了,我需要一些解释。我现在要问的第一个问题是:行中的“我的文件”字符串是什么

    public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");
我应该在那里写什么?它是一个url吗?如果它是一个url,什么的url

如果有人能牵着我的手,引导我理解这一点,我将不胜感激!谢谢大家!

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

我现在的第一个问题是:这个“我的文件”字符串是什么 线路

这应该是文件名。尽管缺少扩展名。你应该加上这个。例如,.txt、.jpg、png

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

您只需要在“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"));

从文件夹中读取

您需要从webgl的服务器读取数据

WebGl不会让你这么做的

以下是建议


谢谢程序员(我们如何在这里标记用户?)。我以为这个“我的文件”在StreamingAssets文件夹中,但是,我的文件中有两个。那么,当StrreamingAssets文件夹中有多个文件时,“MyFile”会变成什么?为什么“if(filePath.Contains(:/”)也应该是if(filePath.Contains(:/”)| | filePath.Contains(:/”)”?我的意思是,为什么要用三个斜杠?你用@theusername回复用户,但在我的回答下你不需要这样做。不管怎样,我都会得到通知。如果您有多个文件,则必须多次调用WWW,并在每个文件加载完毕后向apth提供每个文件的名称。对于最后一个问题,文件路径可以是
/
/
。这就是为什么两者都被检查的原因。再次感谢你。如果StreamingAssets文件夹中有多个文件,“MyFile”如何?我修改了该函数,以便您可以将文件名作为参数传入。请检查编辑后的答案。
StartCoroutine(loadStreamingAsset("Anne.txt"));

StartCoroutine(loadStreamingAsset("AnotherAnne.txt"));

StartCoroutine(loadStreamingAsset("OtherAnne.txt"));