在Unity中,我们可以选择的数据永久化的操作方式有很多种。在这里介绍AssetDatabase API中的创建Asset文件的方法。
创建ScriptableObject对象
首先我们需要创建需要序列化的对象:
[Serializable]
public class Food {
public int ID;
public int code;
public Food(int ID, int code) {
this.ID = ID;
this.code = code;
}
}
[Serializable]
public class FoodData : ScriptableObject {
public List<Food> allFood = null;
}
在这里需要被序列化的类,需要继承ScriptableObject,且需要在上面声明可序列化。 [Serializable]
创建AssetdataUtils工具类
这个类提供以下三个API:
- CreateAssetdata(); // 用于创建Asset文件
- GetAssetdata(); // 获得Asset文件数据
- SaveAssetdata(); // 将更改的数据存储起来
下面直接上代码
public class AssetdataUtils {
public static void CreateAssetdata<T>(T t = null) where T : ScriptableObject {
ScriptableObject ss = ScriptableObject.CreateInstance<T>();
if(t != null) {
ss = t;
}
if(ss == null) {
Debug.Log("ss == null");
return;
}
string path = Application.dataPath + "/Resources/GameAssets";
if(!Directory.Exists(path)) {
Directory.CreateDirectory(path);
}
path = string.Format("Assets/Resources/GameAssets/" + typeof(T).Name + ".asset");
AssetDatabase.CreateAsset(ss, path);
}
public static void SaveAssetdata() {
AssetDatabase.SaveAssets();
}
public static T GetAssetdata<T>() where T : ScriptableObject {
T t = AssetDatabase.LoadAssetAtPath<T>("Assets/Resources/GameAssets/" + typeof(T).Name + ".asset");
return t;
}
}
在这里需要注意一下,当你从GetAssetdata中获得的对象,在改变时,调用SaveAssetdata方法时,Unity会自动把所有改变过的数值都存放起来,所以在这个API中,我们不需要做一些判定。
当然我们也可以通过扩展Inspector来修改这里面的显示方式。这里就不做介绍了。
Comments | NOTHING