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

原文地址

简介

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文件,如果可以就是通过类名获取对应的类对象和,这里需要注意的是,<font color=red>文件名字必须等于类名</font>,然后通过类名获取对应的类型,就可以生成对应的asset文件了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容