Resources
只读,放入的文件打包时会压缩加密,使用 Resources.Load 方法动态加载,一般放一些动态加载的模型资源。
可以在根目录下,也可以在子目录里,只要名子叫 Resources 就可以。
比如目录:/XXX/XXX/Resources 和 /Resources 是一样的,无论多少个叫 Resources 的文件夹都可以。
Resources 文件夹下的资源不管你用还是不用都会被打包进.apk 或者.ipa
Resource.Load
编辑时和运行时都可以通过 Resource.Load 来直接读取。
Resources.LoadAssetAtPath()
它可以读取 Assets 目录下的任意文件夹下的资源,可以在编辑时或者编辑器运行时使用,但是它不能在真机上用,它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。
AssetDatabase.LoadAssetAtPath()
它可以读取 Assets 目录下的任意文件夹下的资源,它只能在编辑时用。它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。
补充
我觉得在电脑上开发的时候尽量来用 Resource.Load() 或者 Resources.LoadAssetAtPath() ,假如手机上选择一部分资源要打 assetbundle,一部分资源 Resource.Load().那么在做.apk 或者.ipa 的时候 现在都是用脚本来自动化打包,在打包之前 可以用 AssetDatabase.MoveAsset()把已经打包成assetbundle 的原始文件从 Resources 文件夹下移动出去在打包,这样打出来的运行包就不会包行多余的文件了。
打完包以后再把移动出去的文件夹移动回来。
StreamingAssets
- 只读,放的文件原样打包,不压缩不加密。
- 使用Application.streamingAssetsPath访问该路径,一般放二进制文件,配置文件(config),或文件型数据库。
- 作用:修改(配置)文件时,不需要再次打包。
这个文件夹下的资源也会全都打包在.apk 或者.ipa 它和 Resources 的区别是,Resources 会压缩文件,但是它不会压缩原封不动的打包进去。
并且它是一个只读的文件夹,就是程序运行时只能读 不能写。它在各个平台下的路径是不同的,不过你可以用 Application.streamingAssetsPath 它会根据当前的平台选择对应的路径。
有些游戏为了让所有的资源全部使用 assetbundle,会把一些初始的 assetbundle 放在
StreamingAssets 目录下,运行程序的时候在把这些 assetbundle 拷贝在Application.persistentDataPath 目录下,如果这些 assetbundle 有更新的话,那么下载到新的
assetbundle 在把 Application.persistentDataPath 目录下原有的覆盖掉。
因为 Application.persistentDataPath 目录是应用程序的沙盒目录,所以打包之前是没有这个目录的,直到应用程序在手机上安装完毕才有这个目录。
StreamingAssets 目录下的资源都是不压缩的,所以它比较大会占空间,
比如你的应用装在手机上会占用 100M 的容量,那么你又在 StreamingAssets 放了一个 100M 的 assetbundle,那么此时在装在手机上就会在 200M 的容量。
Plugins
如果做手机游戏开发一般是android或者ios要接一些SDK可以把SDK依赖的库文件放在这里比如.so .jar .a文件这样打包完以后就会自动把这些文件打在你的包中。
Editer
Editor 文件夹可以在根目录下,也可以在子目录里,只要名字叫 Editor 就可以。比如目录:/xxx/xxx/Editor 和 /Editor 是一样的,无论多少个叫 Editor 的文件夹都可以。
Editor 下面放的所有资源文件或者脚本文件都不会被打进发布包中,并且脚本也只能在编辑时使用。一般会把一些工具类的脚本放在这里,或者是一些编辑时用的 DLL。
比如,我们现在要做类似技能编辑器,那么编辑器的代码放在这里是再好不过了,因为实际运行时我们只需要编辑器生成的文件,而不需要编辑器的核心代码。
Editor Default Resources
Editor Default Resources 注意中间是有空格的,它必须放在 Project 视图的根目录下,如果你想放在/xxx/xxx/Editor Default Resources 这样是不行的。
你可以把编辑器用到的一些资源放在这里,比如 图片、文本文件 等。
它和 Editor 文件夹一样都不会被打到最终发布包里,仅仅用于开发时使用。
你可以直接通过 EditorGUIUtility.Load 去读取该文件夹下的资源。
TextAsset text = EditorGUIUtility.Load("test.txt")as TextAsset;
Debug.Log(text.text);
Gizmos
我觉得这个文件夹其实没什么用处,如下代码所示它可以在 Scene 视图里给某个坐标绘制一个 icon。
它的好处是可以传一个 Vecotor3 作为图片显示的位置。
参数 2 就是图片的名子,当然这个图片必须放在Gizmos 文件夹下面。
这里还是要说说 **OnDrawGizmos()**方法,只要脚本继承了 MonoBehaviour 后,并且在编辑模式下就会每一帧都执行它。
发布的游戏肯定就不会执行了,它只能用于在 scene 视图中绘制一些小物件。
比如要做摄像机轨迹,那么肯定是要在 Scene 视图中做一个预览的线,那么用 Gizmos.DrawLine 和Gizmos.DrawFrustum 就再好不过了。