Unity中的各种路径
本文提供全流程,中文翻译。 使有限时间 具备无限可能 |
Chinar ―― 心分享、心创新! 助力快速完成 为初学者节省宝贵的时间,避免采坑! |
Chinar
教程效果:
全文高清图片,点击即可放大观看
(很多人竟然不知道)
1
Assets
――
资产 根目录
1.1 Path Info
――
路径信息
介绍:这个是程序的数据文件所在文件夹的路径,也就是Assets文件夹的路径
Application.dataPath
1.2 Effect
――
作用
通过这个路径可以访问项目中任何文件夹中的资源,很多API都是基于这个文件目录的
查找目录都需要带上Assets,比如
AssetDatabase
;
注意:Application.dataPath是不允许在移动端使用的, 如果移动端有使用的话会直接卡住!因为移动端是没有访问权限的
Android:通常它会直接指向APK。例外情况是,如果您正在运行拆分二进制构建,在这种情况下它将指向OBB。
2
Resources
――
资源 文件夹
!!
存放资源的特殊文件夹
!!
2.1 Path Info
――
路径信息
默认情况下,
Unity
是没有
Resources
文件夹的,我们需要自行创建
Resources
文件夹放在
Assets
目录下面
只要文件夹名称叫
“Resources”
,它可以出现在根目录
Assets
下的任何位置,包括子目录中
如:
Assets/Resources
与:
Assets/xxx/xxx/xxx/Resources
两者是一样的。并且可以同时存在多个 Resources 文件夹
低版本Unity, 项目中虽然可以有多个
Resources 文件夹 ,
但是其中如果存在同名资源,在打包时就会报错
2018之后的版本测试,尚未出现此类情况
(原因在1.2中做详细说明)
2.2 Mechanism
――
机制
Resources
文件夹是一个只读的文件夹
程序运行时
,通过
Resources.Load()
等API 来读取数据对象
由于
Unity 无法判断脚本有没有访问
到 Resources 中的资源
所以 Resources 文件夹下的资源,
不管用不用
都会被打包发布到程序中
生成一个
resources.assets
( 缺省的AssetBundle )
建议,只放
Prefab
或者一些
Object
对象
Prefab
预制体所用到的资源会被打包发布。没有用到的资源,会被自动过滤掉
2.3 Api
――
接口函数
加载存储在 Resources 文件夹中的资源
函数名 | 功能 |
---|---|
|
返回 Type 类型的所有对象
|
|
指定路径的资源 |
|
指定路径下的所有资源 |
|
异步加载 指定路径的资源 |
|
从内存中卸载资源 |
|
卸载未使用的资源 |
3
StreamingAssets
――
二进制流 资源文件夹
!!
该目录中的任何文件,将原封不动
(不进行任何处理)
的被打包发布
!!
3.1 Path Info
――
路径信息
默认情况下,
Unity
是没有
StreamingAssets
文件夹的,我们需要自行创建
StreamingAssets
文件夹放在
Assets
目录下面
右键
Show in explorer
,打开文件浏览器
3.2 Effect
――
作用
StreamingAssets 与 Resources 区别
Resources
文件夹下的资源打包发布时,会进行一次
压缩和加密
StreamingAssets
文件夹下的资源打包发布时,
原封不动(不进行任何处理)
所以
StreamingAssets
一般放置
数据资源
文件,比如 Json /Xml 等数据文件
在
PC/MAC
中可实现对文件的“增删改查”等操作,
但在移动端是一个只读路径
3.3 Api
――
接口函数
程序打包发布后,根据平台的差异性 (Windows, Ios ,Android)
StreamingAssets
文件夹中的资源,所在的位置也不同,目录名称也会发生变更
返回的路径 | Application.streamingAssetsPath |
---|---|
Mac OS / Windows |
|
iOS |
|
Android |
|
所以说,
Application.streamingAssetsPath
负责根据不同平台,而返回
与之对应的 Url
信息,也就是文件夹的路径
在
Android
平台上使用压缩
.apk
文件,
streamingAsset
中的数据文件包含在压缩的
.jar文件
中
所以需要使用
UnityWebRequest
类访问资产,才可对数据进行正确读取
简化代码
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
/// <summary>
/// 测试获取 StreamAssets 下的数据资源,(图片),并显示在UI上
/// </summary>
public class ChinarWebRequest : MonoBehaviour
{
void Start()
{
StartCoroutine(SendUrl(Application.streamingAssetsPath + "/Chinar.png"));
}
/// <summary>
/// 发起请求
/// </summary>
/// <param name="url">地址</param>
private IEnumerator SendUrl(string url)
{
using (UnityWebRequest uw = UnityWebRequest.Get(url))
{
yield return uw.SendWebRequest();
if (uw.error != null)
{
Debug.Log(uw.error);
}
else
{
if (uw.responseCode == 200) //200表示接受成功
{
Texture2D texture = new Texture2D(400, 350); //创建Texture
texture.LoadImage(uw.downloadHandler.data); //加载Image
Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.one / 2); //得到精灵对象
GameObject.Find("Chinar-Image").GetComponent<Image>().sprite = sprite; //赋值到UI上
}
}
}
}
}
4
Persistent
――
持久数据 文件夹
!!
可读可写,常用于存放用户数据。应用程序更新,不会对其中文件造成影响
!!
它是一个用户数据文件目录,构建
Unity
应用程序时,自动生成该文件夹
4.1 Path Info
――
路径信息
Assets目录下创建一个
Editor
文件夹
创建编辑器扩展的脚本,注意:引用
UnityEditor
命名空间
using UnityEditor;
using UnityEngine;
public class ChinarEditor: MonoBehaviour
{
[MenuItem("Chinar/打开 PersistentDataPath")]//添加菜单项
private static void PersistentDataPath()
{
Application.OpenURL("file:///" + Application.persistentDataPath);//打开路径目录
}
}
点击编辑器按钮
Chinar
–>
PersistentDataPath
4.2 Effect
――
作用
此文件夹可读、可写
常用于存储一些可持久化的用户数据文件
此目录只对应一个应用程序,只要应用不被卸载 / 或是公司名且应用名称不做更改 / 此目录中的文件不会进行任何更改!
只能在应用程序运行时,才能读写操作
Chinar 建议将获得的文件,或是用户的基本信息,等等数据文件,保存到此目录中
例如,将
AssetBundle
包中读取的数据,写入该目录中
5
Application.temporaryCachePath
――
临时路径
5.1 PathInfo
――
路径信息
在编辑器扩展脚本中接着写
#if UNITY_EDITOR
[MenuItem("Chinar/TemporaryCachePath")]
#endif
private static void TemporaryCachePath()
{//打开目标路径
Application.OpenURL("file:///" + Application.temporaryCachePath);
}
点击编辑器按钮
Chinar
–>
TemporaryCachePath
打开文件夹:
我们发现,Windows平台临时数据储存路径与数据持久化路径是一样的.
5.2 Effect
――
作用
临时数据的缓存目录
6
Summarize
――
总结
各路径含义:
属性名称 | 含义 |
---|---|
|
此属性用于返回程序的数据文件所在文件夹的路径 |
|
此属性用于返回流数据的缓存目录,返回路径为相对路径,适合设置一些外部数据文件的路径。 |
|
此属性用于返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件 |
|
此属性用于返回一个临时数据的缓存目录。 |
各路径在几种平台下的目录:
IOS | Android | Windows | Mac | |
---|---|---|---|---|
|
Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data | /data/app/xxx.xxx.xxx.apk | /Assets | /Assets |
|
Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw | jar:file:///data/app/xxx.xxx.xxx.apk/!/assets | /Assets/StreamingAssets | /Assets/StreamingAssets |
|
Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents | /data/data/xxx.xxx.xxx/files | C:/Users/xxxx/AppData/LocalLow/CompanyName/ProductName | /Users/xxxx/Library/Caches/CompanyName/Product Name |
|
Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches | /data/data/xxx.xxx.xxx/cache | C:/Users/xxxx/AppData/Local/Temp/CompanyName/ProductName | /var/folders/57/6b4_9w8113x2fsmzx_yhrhvh0000gn/T/CompanyName/Product Name |
支持
May Be
――
开发者,总有一天要做的事!
拥有自己的服务器,无需再找攻略 使有限时间 具备无限可能! |
Chinar 知你所想,予你所求!
(
Chinar Blog
)
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email:
ichinar@icloud.com
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址