Unity杂文——自动创建asset资源文件

  1. 简介
  2. 代码

原文地址

简介

Unity保存数据的方式有很多,比如我们经常用的json,xml和Txt,笔者今天讲到的是另外一种保存方式,asset文件,这个是unity提供的一种新的保存数据的方式,笔者也是刚使用没多久,这里就不详细进行介绍了,笔者今天主要是介绍一键自动创建对应的asset文件。

代码

 public class CreateAssetEditor
{

    [MenuItem("Assets/Create/CreateAsset",false,81)]
    public static void OnCreateAsset()
    {
        foreach (var guid in Selection.assetGUIDs)
        {
            var path = AssetDatabase.GUIDToAssetPath(guid);
            var pathSplit = path.Split('/');
            var className = pathSplit[pathSplit.Length - 1].Replace(".cs", "");
            var classType = GetClassByClassName(className);
            var assetPath = path.Replace(".cs", ".asset");
            if (File.Exists(assetPath))
            {
                LBLogWrapper.Error("创建失败,资源已经存在");
            }
            else if (classType != null) 
            {
                var classInst = ScriptableObject.CreateInstance(classType);
                AssetDatabase.CreateAsset(classInst,assetPath);
            }
            else
            {
                LBLogWrapper.Error("创建失败,脚本不可创建");
            }
        }
    }
    
    [MenuItem("Assets/Create/CreateAsset",true)]
    private static bool IsValidateFun()
    {
        return (from guid in Selection.assetGUIDs
            select AssetDatabase.GUIDToAssetPath(guid)
            into path
            select path.Split('/')
            into pathSplit
            select pathSplit[pathSplit.Length - 1]).Any(className => className.Contains(".cs"));
    }

    /// <summary>
    /// 通过类名获取对应的类
    /// </summary>
    /// <param name="className"></param>
    /// <returns></returns>
    private static Type GetClassByClassName(string className)
    {
        var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();

        return allAssemblies.SelectMany(assembly => assembly.GetTypes()).FirstOrDefault(type =>
            type.Name == className && type.IsSubclassOf(typeof(ScriptableObject)));
    }

}

脚本的原理很简单,就是获取当前选择的脚本,判断是否可以创建asset文件,如果可以就是通过类名获取对应的类对象和,这里需要注意的是,文件名字必须等于类名,然后通过类名获取对应的类型,就可以生成对应的asset文件了。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 841774407@qq.com

×

喜欢就点赞,疼爱就打赏