在Unity项目的开发过程中,可以选择创建任意符合规范名称的文件夹来组成整个项目的目录结构。同时,Unity定义了一系列特定名称的文件夹用于处理指定的任务,如必须将与编辑器相关的脚本放置在Editor文件夹内才能正常工作。
Assets
??Assets文件夹包括了Unity项目中使用到的所有资源文件。新建Unity项目后,会自动创建该文件夹。在Project面板中,Assets作为根文件夹使用。并且,不需要明确地指明,所有的API方法默认全部的资源文件都位于Assets文件夹内。
Editor
??放置在Editor文件夹内的脚本被看为编辑器脚本,而不是运行时脚本。该文件夹内的脚本仅仅开发时在编辑器内运行,而不是被包含进build后的项目中。只有在此文件夹内的脚本能够访问Unity Editor的API,从而对编辑器进行拓展。
Resources
??Resources文件夹允许在脚本中通过文件的名称来访问对应的资源。使用Resources.Load方法进行动态加载,放在这一文件夹的资源永远被包含进build中,即使没有被使用。一旦打包生成项目,Resources文件夹内的所有资源被打包进存放资源的archive中。
??当资源作为脚本变量访问是,这些资源在脚本被实例化之后就被加载进内存。若资源过大,可以将这些大资源放进该文件夹内进行动态加载;当不再使用这些资源时,调用Resources.UnloadUnusedAssets释放内存。
Resources.Load()进行加载Assets中的资源 资源:预制体、模型、材质、纹理、音频、视频、数据文档、场景等等
注意:Resources这种动态加载方式是只读的,在游戏打包后,就无法对文件夹的内容进行修改
Resources的方法 FindObjectsOfTypeAll:返回某一种类型的所有资源 Load:通过路径(或名称)加载资源 LoadAll:加载该Resources下的所有资源 LoadAsync:异步加载资源,通过协程实现 UnloadAsset:卸载加载的资源 UnloadUnusedAssets:卸载在内存分钟未使用的资源
加载资源
public class Resource : MonoBehaviour {
void Start()
{
AddObjToScenes();
}
public void AddObjToScenes()
{
var obj = Resources.Load("123");
GameObject instance = Instantiate(obj) as GameObject;
instance.transform.position = Vector3.zero;
obj = null;
Resources.UnloadAsset();
}
}
Plugins
??Plugins文件夹用于存放native插件,这些插件会被自动包含进build中。在Windows平台下,native插件是dll文件
Plugins文件夹必须是Assets文件夹的直接子目录
Gizmos
??Unity可以使用Gizmos类在Scene面板中绘制图像来显示设计细节,其中Gizmos.DrawIcon函数可以在场景窗口中绘制一个图标以标记特殊的对象和位置,而该函数所使用的图像文件位于Gizmos文件夹中
StreamingsAssets
??当需要使用某种保留原格式的资源而不是Unity进行特殊处理后的格式时,可将其资源放置在StreamingAssets文件夹中。该文件夹中资源将在游戏安装时原样复制到目标设备相应的文件夹下,无论任何平台都可以通过Application.streamingAssetsPath进行访问
StandardAssets
??StandardAssets文件夹中的脚本最先被编译,这些脚本会根据语言被导出到Assembly-Csharp-firstpass或Assembly-UnityScript-firstpass项目中。将脚本防到此文件夹内,就可以用C#脚本来访问js脚本或其他语言的脚本
隐藏文件夹
??以 . ‘’ 开头、以 ~ 结尾、以 cvs 命名或以 .tmp 为扩展名的文件夹均为隐藏文件夹,隐藏文件夹中的资源不会被导入,脚本也不会被编译,Unity将会完全忽视此文件夹的存在。
脚本编译
(1)编译在StandardAssets、Plugins文件夹中的所有脚本。在这些文件夹内的脚本不能直接访问这些文件夹以外的脚本,不能直接引用类或它的变量,但是可以使用GameObject.SendMessage与它们通信。 (2)编译在StandardAssets/Editor 、 Plugins/Editor文件夹中的所有脚本。如果想要使用UnityEditor命名空间,必须将脚本放置到这些文件夹中。 (3)编译在Assets/Editor外面的并且不在步骤(1)和(2)中的所有脚本文件。 (4)编译在Assets/Editor中的所有脚本
|