Unity3D WWW用file协议下载失败问题

Unity3D中加载本地或远程资源会用到WWW类,最使用Unity3D的WWW类加载本地磁盘资源时发现总是加载失败,先看看以下例子:

using System.Collections;
using UnityEngine;

public class WWWTest : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(Load());
    }

    private IEnumerator Load()
    {
        string path = "file://D:/file.txt";
        WWW www = new WWW(path);
        yield return www;

        if (www.error != null)
        {
            Debug.LogError(www.error);
        }
        else
        {
            Debug.Log(www.text);
        }
    }
}

这段代码是从path路径加载一个文本文件,成功则打印文本内容,失败则打印异常信息。

  • 以上Unity工程存放在D盘
  • 创建D:/file.txt文件,内容是'Unity3D DDD'
  • 创建E:/file.txt文件,内容是'Unity3D EEE'

一轮测试

path = file://D:/file.txt时运行结果为:Unity3D DDD
path = file://E:/file.txt时运行结果为:Unity3D DDD

两个路径,结果一样。两次测试都读取了'file://D:/file.txt'文件,有点怪异接着测

二轮测试

删掉D:/file.txt,path = file://E:/file.txt运行结果为:Couldn't open file /file.txt

结论

由以上两轮测试猜测,应该是file://E:/file.txt这个路径有问题。
多次测试后发现写成file://E:\file.txt时问题解决。

在Windows上运行Unity3D,WWW用file协议加载文件时,路径部分必需用"\",
其它平台未测,原理一样,路径分隔符可考虑用System.IO.Path.PathSeparator

标签:unity3d, 游戏资源管理

已有 3 条评论

  1. hejianchun hejianchun

    你说错了,是要释放www。

    1. 测试结果的确是路径分隔符问题,跟是否释放www无关

  2. April April

    使用 file:///即可~

添加新评论