1.在编辑器中动态读取文件
在实际的游戏开发中,其实有相当一部分的静态数据是可以放在客户端的,所以自然而然地产生了动态读取这些文件的需求,比如csv、xml等,不管是用什么系统做Unity的开发,如果想要实现这种效果,显然要先在编辑器中实现基本的功能,然后再去各个移动平台去测试,所以要读取外部文件的第一步,显然要再电脑端实现这个共嫩南瓜(编辑器)
下面举一个读取xml的例子-----读取xml文件并动态生成一个类
举例:
<?xml version="1.0" encoding="UTF-8"?>
<test>
<name>chenjd</name>
<blog>http://www.cnblogs.com/murongxiaopifu</blog>
<organization>Fanyoy</organization>
<age>25</age>
</test>
这是我们要加载的xml文件
将这个文件放在任意地方,通过指定地址,将其读取
public class Test2 : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
XElement result = LoadXML("Assets/xml-to-egg/Test.xml");
Debug.Log(result.ToString());
}
private XElement LoadXML(string v)
{
XElement xml = XElement.Load(v);
return xml;
}
// Update is called once per frame
void Update()
{
}
}
读取效果如下:

待考虑的问题
1.不规范的地址,如果地址参数如上写,跨平台一定不对,出现的问题就是再移动端的Unity中找不到目标文件夹
2.使用的是电脑上传统的读取资源的做法,没有使用unity提供的方法,可能会找到文件,但是不一定能正确读取文件内容
以上是可能导致造成一东莞读取资源失败的原因,接下来先看一下第一个问题(关于不同移动平台上的资源路径问题)
2.移动平台的资源路径问题
我们知道,如果你想要读取一个文件,自然要找到这个文件,下表是unity中资源路径以及他们的介绍
| unity3D中的路径 | 介绍 |
|---|---|
| Application.dataPath | 用于返回程序的数据文件所在的文件及的路径 |
| Application.streamingAssetsPath | 用于返回流数据的缓存目录,返回路径为相对路径 |
| Application.persistentDataPath | 用于返回一个持久化的数据储存目录的路径,可以在此路径下储存一些持久化的数据文件 |
| Application.temporaryCachePath | 返回临时数据的缓存目录 |
| Android平台 | 具体路径 |
|---|---|
| Application.dataPath | /data/app/xxx.xxx.apk |
| Application.streamingAssetsPath | jar:file:///data/app/xxx.xxx.apk/!assets |
| Application.persistentDataPath | /data/data/xxx.xxx.xxx/files |
| Application.temporaryCachePath | /data/data/xxx.xxx.xxx/cache |
| IOS平台 | 具体路径 |
|---|---|
| Application.dataPath | Application/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data |
| Application.streamingAssetsPath | xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw |
| Application.persistentDataPath | xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents |
| Application.temporaryCachePath | xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches |
是不是感觉很奇怪,我们知道再Unity编辑器中默认的资源文件存放路径就是Assets,怎么会出来这么多路径呢?
要解决这个疑问,先来看看unity中资源处理种类
再unity中涉及到的资源位置有以下几个类----------Resources、StreamingAssets、AssetBundle、PersistentDataPath
Resources:作为unity的保留文件夹出现的,也就是说,如果你创建的文件夹的名字与这个名字重名,那么在打包的时候里面的内容同要会被无条件的打包到发布包中,其特点有:
1.只读(不能修改)
2.会将文件夹中的内容打包集成到.assets中,建议放一些Prefab
3.主线程加载
4.资源读取用Resources.load()
StreamingAssets:与Resources很像,同样作为保留文件夹出现,但是不同的是,前者会被压缩和加密,erStreamingAssets不会,它主要用来放一些二进制文件,特点如下
1.只读不可写
2主要存放二进制文件
只能用WWW类来读取
AssetBundle:简而言之就是把Prefab或者二进制文件封装成AssetBundle文件(也是一种二进制)需要注意的是在移动端无法更新脚本
特点如下:
1.unity定义的二进制类型
2.最好将Prefab分装成AssetBundle,但是刚才说移动端无法更新脚本又是怎么回事?只要这个prefab上面挂载的是本地脚本是可以的
3.使用www加载
persistentDataPath:看上去它 就是一个路径,实际上在在这个路径下是可读可写的
特点:内容可读可写,不过只能运行时才能写入或者读取,提前将数据存入这个路径是不行的
2.无内容限制,你可以从StreamingAsset中读取二进制文件就或者从AssetBundle读取文件来写入这里
3.写下的文件是可以在电脑上查看,同样可以清理掉
介绍完这几个资源处理种类下面举几个例子来实现读取外部资源的过程
1.利用Resources读取
在unity中创建文件夹Resources,将Test.xml复制一份,通过Respurces读取
代码如下
using System;
using System.

本文详细介绍Unity中多种资源读取方式,包括Resources、StreamingAssets、AssetBundle等,涵盖跨平台资源路径解析与实例演示。
最低0.47元/天 解锁文章
4461





