Resource.load
1.默认读取文件的目录是 "Assets/Resources",所有资源文件都放在该文件夹下。如果读取的文件有多种,建议在Assets/Resources下用“/子文件夹“”的命名方式创建子文件夹。如"Assets/Resources/Mesh"
2.读取的文件千万不要加文件的后缀!
3.读文件的时候,尽量避免这种写法:
string fname = "Mesh/model1";
GameObject prb= (GameObject)Resources.Load(fname);
因为有时候可能会读不到对应文件。而且就算能读到"Mesh/model1",它也可能读不到"Mesh/model2"。尽管他们仅仅差一个数字。 这个bug不知道怎么回事,可能和unity版本有关。但是我用下面这种写法,就可以读到所有文件,强烈推荐:
string fname = "Mesh/model1";
GameObject prb= Resources.Load<GameObject>(fname);
AssetDatabase.CreateAsset
保存unity动态生成的网格数据(Mesh),要保存为.asset文件
string asname = "Assets/Resources/Mesh/Mesh_model" + model_id.ToString() + ".asset";
AssetDatabase.CreateAsset(mesh, asname);
AssetDatabase.LoadAssetAtPath
加载网格(asset)或材质(mat)文件通用写法 也可以用Resources.Load()
Mesh m = AssetDatabase.LoadAssetAtPath(asname, typeof(Mesh)) as Mesh;
PrefabUtility.SaveAsPrefabAsset
将程序生成的网格持久化为预制体。注意预制体依赖本地网格(.asset)和材质文件(.mat),要先把材质和网格保存到本地。不然没法存储为预制体。最后记住要销毁实例对象!
GameObject prb = new GameObject("prb");
prb.AddComponent<MeshFilter>().mesh=m;//m->读取本地网格文件 添加到临时游戏对象
prb.AddComponent<MeshRenderer>().materials = materials;//materials->读取本地材质文件列表 添加到临时游戏对象
GameObject go = Instantiate(prb);//实例化临时对象
go.name = go.name.Replace("(Clone)", string.Empty) + model_id.ToString();//重命名
string pbname= "Assets/Resources/Mesh/Mesh_model" + model_id.ToString() + ".prefab";//设置预制体存储路径
PrefabUtility.SaveAsPrefabAsset(go, pbname);//保存临时对象为预制体
DestroyImmediate(go);//记住这个是保存为预制体的关键