Asset文件使用

发布于 2017-12-01  678 次阅读


在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来修改这里面的显示方式。这里就不做介绍了。

 


What doesn’t kill you makes you stronger.