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