【问题标题】:Application.streamingAssetsPath and WebGL buildApplication.streamingAssetsPath 和 WebGL 构建
【发布时间】:2017-09-27 08:09:54
【问题描述】:

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

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

    public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");

我应该在那里写什么?是网址吗?而如果是url,那么url是什么?

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

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

【问题讨论】:

    标签: c# json unity3d unity-webgl


    【解决方案1】:

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

    这应该是文件的名称。虽然它缺少它的扩展名。你应该添加那个。例如,.txt.jpgpng....

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

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

    【讨论】:

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

    你从一个文件夹中读取

    你需要从服务器读取 webgl

    WebGl 不会让你这样做。

    这里是建议

    https://docs.unity3d.com/Manual/UnityWebRequest-RetrievingTextBinaryData.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2012-07-12
      • 2020-05-07
      • 1970-01-01
      相关资源
      最近更新 更多