通过定制资源配置文件来管理数据
2017-05-27 12:25
447 查看
通过定制资源配置文件来管理数据
即:把所有可序列化的数据容器类放入自定义资源文件中,该资源文件可以在Inspector视图中进行配置,Unity会自动进行序列化、反序列化来读取、保存这些数据在该资源文件中。
使用定制资源配置文件与使用XML、JSON或者其他一些外部文件格式相比有很多好处:
通常,文件大小会更小
不需要自己去序列化,Unity将会掌控所有的序列化和反序列化。
唯一不好的地方:不小心减小了集合的Size属性后,会丢失数据(不过还好,这里也支持Undo操作,即可以Ctrl+z来撤销,数据可以还原)
如GameObjectPoolElement.cs
注意:资源配置文件必须以.asset为扩展名,否则编辑器无法识别
扩展编辑器类:CreatMenu.cs
2.在Inspector面板中可以对它进行配置修改,任何改动都会被自动保存到该文件中(Unity会自动执行序列化操作来保存)。
3.定制资源配置文件现在成为了一个资源文件,可以像使用其它资源文件一样使用它。
如:把该文件直接赋值给GameObjectPool类型的变量,如:
即:把所有可序列化的数据容器类放入自定义资源文件中,该资源文件可以在Inspector视图中进行配置,Unity会自动进行序列化、反序列化来读取、保存这些数据在该资源文件中。
使用定制资源配置文件与使用XML、JSON或者其他一些外部文件格式相比有很多好处:
通常,文件大小会更小
不需要自己去序列化,Unity将会掌控所有的序列化和反序列化。
唯一不好的地方:不小心减小了集合的Size属性后,会丢失数据(不过还好,这里也支持Undo操作,即可以Ctrl+z来撤销,数据可以还原)
步骤1:先定义可序列化的数据容器类
数据容器类将成为资源配置文件的基本数据项,并可在Inspector面板中显示、修改这些数据(序列化与反序列化)如GameObjectPoolElement.cs
using UnityEngine; using System.Collections; using System.Collections.Generic; using System; [Serializable] public class Enemy { public string Name; public int Capacity; public GameObject Prefab; [NonSerialized] private List<GameObject> goList = new List<GameObject>(); } GameObjectPoolElement的管理类,GameObjectPool.cs using UnityEngine; using System.Collections.Generic; public class GameObjectPool : ScriptableObject { public List<GameObjectPoolElement> GOPoolElement; }
步骤2:扩展编辑器
用于创建定制资源配置文件的工具方法容器类:CustomAssetUtility.cs注意:资源配置文件必须以.asset为扩展名,否则编辑器无法识别
using UnityEngine; using UnityEditor; using System.IO; public class CustomAssetUtility { //创建一个指定类型的定制资源配置文件 public static void CreateAsset<T>() where T : ScriptableObject { T asset = ScriptableObject.CreateInstance<T>(); string path = AssetDatabase.GetAssetPath(Selection.activeObject); if (path==string.Empty) { path = "Assets"; } else if (Path.GetExtension(path)!=string.Empty) //如果扩展名不为空 { path = path.Replace(Path.GetFileName(AssetDatabase.GetAssetPath(Selection.activeObject)), string.Empty); } //存放路径+文件全名,把生成的资源文件放于Resources文件夹是为了打包后进行压缩,使用时便于读取,但也可以放在其它地方 string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath(path + "/Resources/ " + typeof(T).ToString() + ".asset"); AssetDatabase.CreateAsset(asset, assetPathAndName); AssetDatabase.SaveAssets(); EditorUtility.FocusProjectWindow(); Selection.activeObject = asset; } }
扩展编辑器类:CreatMenu.cs
using UnityEngine; using UnityEditor; using System; using System.Collections.Generic; public class CreatMenu { [MenuItem("MyTools/CreateAssets/GameObjectPool")] public static void CreateAsset() { CustomAssetUtility.CreateAsset<GameObjectPool>(); } }
步骤3:使用定制资源配置文件
1.点击编辑器主菜单上的MyTools/CreateAssets/GameObjectPool来创建一个定制资源配置文件。2.在Inspector面板中可以对它进行配置修改,任何改动都会被自动保存到该文件中(Unity会自动执行序列化操作来保存)。
3.定制资源配置文件现在成为了一个资源文件,可以像使用其它资源文件一样使用它。
如:把该文件直接赋值给GameObjectPool类型的变量,如:
using UnityEngine; using System.Collections.Generic; public class test : MonoBehaviour { //方式1:直接拖拽赋值 //public GameObjectPool goPool1; //方式2:代码读取资源 private GameObjectPool goPool2; void Awake() { goPool2 = Resources.Load<GameObjectPool>("GameObjectPool"); } void Start() { List<GameObjectPoolElement> goPoolElementList = goPool2.GOPoolElement; Debug.Log(goPoolElementList[0].Name); Debug.Log(goPoolElementList[0].Capacity); Debug.Log(goPoolElementList[0].Prefab); } }
相关文章推荐
- 通过类加载器管理资源和配置文件
- Hibernate动态建表,通过hbm.xml配置文件创建数据表,进行数据库操作, 动态模型
- 通过properties配置文件连接数据库
- java 高新技术【6】 反射开发框架以及用 类加载器 管理资源和配置文件
- 类加载管理资源、配置文件
- Android Studio下通过Gradle配置实现资源文件的模块化
- 黑马程序员---用类加载器的方式管理资源和配置文件
- 通过资源文件配置Android下拉列表…
- 专业版Unity技巧分享:使用定制资源配置文件
- 黑马程序员--用类加载器的方式管理资源和配置文件
- 在ssh中通过配置文件获得数据的connection
- java 高新技术【6】 反射开发框架以及用 类加载器 管理资源和配置文件
- MySQL Cluster管理节点配置文件-数据节点4G内存
- MySQL Cluster管理节点配置文件-数据节点4G内存
- 黑马程序员_用类加载器的方式管理资源和配置文件简单介绍
- 用类加载器的方式管理资源和配置文件
- MySQL Cluster线上管理节点配置文件-数据节点32G内存
- 通过WEBDAV管理Domino中的文件资源
- 类加载器的方式管理资源和配置文件/JavaBean/重构_内省的简单应用
- 专业版Unity技巧分享:使用定制资源配置文件 ScriptableObject