# 【特殊文件夹】
# Assets
这是存储项目资源的主文件夹,是Unity项目中的基本文件夹。
这个文件夹里除了Editor外的所有文件,都会被打包到安装包里。
通过代码 Application.dataPath
进行获取
以下是一些常用的子文件夹:
- Scenes 场景
- Prefabs 预置体
- Scripts 脚本
- Models fbx文件(模型、动作)
- Materials 材质
- Textures 纹理贴图
- Audios 声音
- Animations(动画、动画控制器、时间轴)
- Other(字体,各种配置)
- Resources
- StreamingAssets
- Editor
# Editor
这个文件夹包含用于扩展Unity编辑器的脚本。如果您想编写自己的编辑器扩展,可以将脚本放在这个文件夹中。
# Resources
这个文件夹用于存储在运行时需要动态加载的资源,如音频、纹理等。
- 在运行时通过通过
Resources.Load()
方法进行加载。 - 构建打包时,会被嵌入到包体中(压缩)。
- 一般情况下场景中直接引用的资源放在“Assets”,需要在运行时动态加载的资源放在“Resources”。
- 使用
string resourcesPath = Application.dataPath + "/Resources/";
进行获取。
假设你有一个在“Resources/Textures”文件夹下的纹理文件“myTexture.png”,可以使用以下代码加载它:
Texture myTexture = Resources.Load<Texture>("Textures/myTexture");
如果你想加载一个位于“Resources/Prefabs”文件夹下的预制体“myPrefab.prefab”,可以使用以下代码:
GameObject myPrefab = Resources.Load<GameObject>("Prefabs/myPrefab");
# StreamingAssets
- 构建打包时,会被嵌入到包体中(不压缩)。
- 在运行时通过代码加载。
- 存储不需要经过压缩或处理的原始文件,如视频、音频等。
- 尽量减少文件数量和控制大小,避免影响安装包大小。
以下是一个加载StreamingAssets目录中文本文件的示例代码:
IEnumerator LoadTextFile(string fileName)
{
string filePath = Application.streamingAssetsPath + "/" + fileName;
using (UnityWebRequest www = UnityWebRequest.Get(filePath))
{
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.LogError("Failed to load file: " + www.error);
}
else
{
string text = www.downloadHandler.text;
// 使用加载的文本文件
}
}
}
# Packages
这个文件夹包含项目中使用的所有导入包。您可以使用Unity Package Manager(UPM)来管理这些包。
# ProjectSettings
这个文件夹包含项目的设置,包括输入、渲染、场景、版本控制等设置。
# Library
这个文件夹包含自动生成的文件,如编辑器日志、缓存文件等。这个文件夹不应该被手动修改,因为这些文件是由Unity自动生成的。
- 不应该提交到svn或者git。
# Temp
这个文件夹用于存储临时文件,如构建时生成的文件等。这个文件夹的内容可以随时删除,因为它们可以在需要时重新生成。
- 不应该提交到svn或者git。
# Logs
存放开发过程中引擎产生的一些日志文件。
- 不应该提交到svn或者git。
# obj
存放开发过程中引擎产生的一些Debug文件。
- 不应该提交到svn或者git。
# 工程文件夹
这个文件夹是Unity项目文件夹本身。开发工具时可能会用得到。
使用以下代码进行获取:
System.IO.Directory.GetCurrentDirectory();
以工程目录:G:\vpsvn\u3d\UP2019_TEST_20220422为例,GetCurrentDirectory()的值是:
- 在PC上输出“G:\vpsvn\u3d\UP2019_TEST_20220422”。
- 在安卓模拟器或者安卓手机上测试的输出结果是“/”。
# 运行时沙箱文件夹
不同平台具体位置不同,但对于开发者,使用Api获取路径即可。
- 使用 Application.persistentDataPath 获取沙箱文件夹路径。
# 动态写入数据
using System.IO;
using UnityEngine;
public class DataWriter : MonoBehaviour
{
private string filePath;
void Start()
{
// 获取可写入数据的文件夹路径
filePath = Application.persistentDataPath + "/data.txt";
// 写入数据到文件
WriteData("Hello World!");
}
void WriteData(string data)
{
// 打开或创建一个文本文件
FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
// 在文件中写入数据
StreamWriter streamWriter = new StreamWriter(fileStream);
streamWriter.WriteLine(data);
// 关闭文件流
streamWriter.Close();
fileStream.Close();
}
}
# 动态读取数据
using UnityEngine;
using System.IO;
public class DataReader : MonoBehaviour
{
private string filePath;
void Start()
{
// 获取可写入数据的文件夹路径
filePath = Application.persistentDataPath + "/data.txt";
// 读取数据
string data = ReadData();
// 打印读取的数据
Debug.Log("Read data: " + data);
}
string ReadData()
{
// 判断文件是否存在
if (!File.Exists(filePath))
{
Debug.LogError("File does not exist!");
return null;
}
// 读取文件中的数据
StreamReader reader = new StreamReader(filePath);
string data = reader.ReadToEnd();
// 关闭文件流
reader.Close();
return data;
}
}
← 【生命周期】 【全局局部坐标系转换】 →