我们在做项目游戏时,会有很多的配置信息,有的是一些表格,然后做配置表,生成xml等文件再加载到unity来使用,还有一些轻量级的数据做到setting类的公共字段,在面板赋值,为了方便,也会生成一个本地文件,这样可以在后续更改时尽可能少的去修改源代码。
生成asset文件要使用到 AssetDatabase 这个类,关于这个类似操作asset文件夹下的文件的,可以加载图片,资源等,详细的可以去查看 API.我们这里只需要使用它的CreateAsset()方法。
该方法需要提供路径,就是你文件存储的路径,还有存储的内容。需要特别注意的是:路径是相对于asset文件夹就是工程文件夹,不是绝对路径,如果使用绝对路径是无法创建的,而且创建之前要确保该文件夹存在,否则也无法创建成功(这里采坑才发现,当使用绝对路径它会一直告诉你文件夹路径有问题,要使asset文件夹相对路径)
然后,要先创建一下你要保存的内容,这里要用到ScriptableObject ,关于这个 的api就不在贴了,由于该文件是需要我们在运行之前就得创建的,所以也用到了编辑器扩展相关知识,不了解的去 充下电。好了基本涉及到的知识点讲完了接下来上代码
首先贴上实例的要做成文件的类:
[Serializable]
public class LocalSettings : ScriptableObject
{
public GameSetting gameSetting;
public int val;
public float fl;
}
其中gamesetting是一个数据类,可序列话的,但是不继承scriptableObject。
接下来是负责创建的工具类:
public class ConfigFile <T>where T :ScriptableObject
{
//
public static void CreatLocalFile()
{
if (!Directory.Exists (SettingFilePath))
{
Directory.CreateDirectory(SettingFilePath);
}
string path = "Assets/SettingFiles/" + typeof(T)+ ".asset";//使用类 的名字
ScriptableObject ob = ScriptableObject.CreateInstance(typeof(T));
if (ob ==null)
{
Debug.LogError("cant creat file:" + typeof(T));
}
else
{
Debug.Log("Creat path:" +path);
AssetDatabase.CreateAsset(ob, path);
}
}
}
该类负责创建asset文件,通过传入继承了scriptableObject 的类
最后是编辑器的:
[MenuItem("ConfigFile/Create/LocalSetting")]
public static void Create()
{
ConfigFile<LocalSettings>.CreatLocalFile();
}
这样当在窗口点击localsetting按钮就可以创建asset文件了!
Get到了吗?点个赞呗!!