Unity3d特殊文件夹名称:Resources
特性
1.读取Resources目录下的文件(第一层目录下的物体)不用分割符,
2.路径参数以“/”表示文件夹分隔符,最后是所加载的资源名称,不要加后缀名
3.Resources文件夹可以在Assets根目录下,也可以在子目录里,只要名子叫Resources就可以。比如目录:/xxx/xxx/Resources 和 /Resources 是一样的,无论多少个叫Resources的文件夹都可以。
4.Resources文件夹下的资源不管你用还是不用都会被以压缩的方式打包进.apk或者.ipa 。
Resources.Load路径写法:不要加后缀名,和Resources,
例子0:在第一层目录下
路径:"Resources/Cube.prefab"
写成:"Cube"
例子1:
路径:"Resources/effect/building/Cube.prefab"
写成:"effect/building/Cube"
//把资源加载到内存中
GameObject prefab =Resources.Load<GameObject>("effect/building/Cube");
if (prefab)
{
//用内存中GameObject模板克隆一个出来,用加载得到的资源对象,实例化游戏对象,实现游戏物体的动态加载
GameObject obj = GameObject.Instantiate(prefab) as GameObject;
if (obj)
{
obj.name = "xxxxxxxxxxx";
}
}
// 加载其他非GameObject类型的资源
Texture2D image = Resources.Load<Texture2D>("Images/1");
// 测试是否加载成功
Debug.Log(image.name);
/*
卸载资源
*/
// 卸载非GameObject类型的资源,会将已加载资源及其克隆体剔除
Resources.UnloadAsset(image);
// 卸载GameObject类型的资源的克隆体
Destroy(obj);
Resource.Load :编辑时和运行时都可以通过Resource.Load来直接读取。
Resources.LoadAssetAtPath() :它可以读取Assets目录下的任意文件夹下的资源,它可以在编辑时或者编辑器运行时用,它但是它不能在真机上用,它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。
AssetDatabase.LoadAssetAtPath():它可以读取Assets目录下的任意文件夹下的资源,它只能在编辑时用。它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。
如果是创建NGUI ui预制物的话:
GameObject obj =NGUITools.AddChild(NGUIRoot.Instance.gameObject, prefab);
/// <summary>
/// Resouce加载实例化物体
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static GameObject ResouceIniteGameObjcet(string path)
{
var prefab = Resources.Load<GameObject>(path);
if (prefab)
{
var obj = GameObject.Instantiate(prefab);
if (obj)
{
return obj;
}
}
Debug.LogError("ResouceLoad GameObject false:" + path);
return null;
}
/// <summary>
/// Resouce加载实例化ui
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static GameObject ResouceIniteNGUI(Transform NGUIrootObj,string path)
{
var prefab = Resources.Load<GameObject>(path);
if (prefab)
{
var obj = NGUITools.AddChild(NGUIrootObj, prefab);
if (obj)
{
return obj;
}
}
Debug.LogError("ResouceLoad GameObject false:" + path);
return null;
}
/// <summary>
/// 通过Resouce 加载资源
/// </summary>
/// <param name="path">如:路径"Resources/effect/building/Altar.prefab",那么写成"effect/building/Altar"</param>
/// <returns></returns>
public static T ResourcesLoad<T>(string path) where T : Object
{
var obj =Resources.Load(path, typeof(T)) as T; ;
if (obj)
{
return obj;
}
Debug.LogError("ResouceLoad 资源( " + typeof(T).Name + ") false:" + path);
return obj;
}